Move splitDots and prevent a non-exhaustive pattern match warning

This commit is contained in:
Max New 2014-01-18 17:44:11 -06:00
parent 4a25c165a4
commit 53c2ab1531
4 changed files with 14 additions and 15 deletions

View file

@ -12,7 +12,6 @@ import Generate.JavaScript.Helpers
import qualified Generate.Cases as Case
import qualified Generate.JavaScript.Ports as Port
import qualified Generate.Markdown as MD
import qualified Parse.Helpers as PHelp
import qualified SourceSyntax.Helpers as Help
import SourceSyntax.Literal
import SourceSyntax.Pattern as Pattern
@ -312,7 +311,7 @@ generate unsafeModule =
jsImport modul = setup Nothing path ++ [ include ]
where
path = PHelp.splitDots modul
path = Help.splitDots modul
include = assign path $ dotSep ("Elm" : path ++ ["make"]) <| ref "_elm"
setup namespace path = map create paths
@ -352,7 +351,7 @@ binop span op e1 e2 =
func | Help.isOp operator = BracketRef () (dotSep (init parts ++ ["_op"])) (string operator)
| otherwise = dotSep parts
where
parts = PHelp.splitDots op
parts = Help.splitDots op
operator = last parts
opDict = Map.fromList (infixOps ++ specialOps)

View file

@ -18,16 +18,6 @@ import SourceSyntax.Expression
import SourceSyntax.PrettyPrint
import SourceSyntax.Declaration (Assoc)
splitDots :: String -> [String]
splitDots = go []
where
go vars str =
case break (=='.') str of
(x,'.':rest) | Help.isOp x -> vars ++ [x ++ '.' : rest]
| otherwise -> go (vars ++ [x]) rest
(x,[]) -> vars ++ [x]
reserveds = [ "if", "then", "else"
, "case", "of"
, "let", "in"

View file

@ -3,6 +3,15 @@ module SourceSyntax.Helpers where
import qualified Data.Char as Char
splitDots :: String -> [String]
splitDots = go []
where
go vars str =
case break (=='.') str of
(x,_:rest) | isOp x -> vars ++ [x ++ '.' : rest]
| otherwise -> go (vars ++ [x]) rest
(x,[]) -> vars ++ [x]
brkt :: String -> String
brkt s = "{ " ++ s ++ " }"

View file

@ -5,15 +5,16 @@ import Control.Arrow (first, (***))
import Data.List (intercalate)
import qualified Data.Set as Set
import qualified Parse.Helpers as PHelp
import qualified Parse.Helpers as PHelp
import SourceSyntax.Expression
import qualified SourceSyntax.Helpers as SHelp
import SourceSyntax.Location
import SourceSyntax.Module
import SourceSyntax.Pattern
var :: String -> String
var = intercalate "." . map (dereserve . deprime) . PHelp.splitDots
var = intercalate "." . map (dereserve . deprime) . SHelp.splitDots
where
deprime = map (\c -> if c == '\'' then '$' else c)
dereserve x = case Set.member x PHelp.jsReserveds of