on master help sign in
Move splitDots and prevent a non-exhaustive pattern match warning
commit53c2ab15311564ed89f245ec41ae51ac2a6fc050 authorMax New <maxsnew@gmail.com> dateSat 18 Jan 2014, 17:44 (13 years ago) parent4a25c16
4 files changed+14−15
compiler/Generate/JavaScript.hs+2−3 compiler/Parse/Helpers.hs−10 compiler/SourceSyntax/Helpers.hs+9 compiler/Transform/SafeNames.hs+3−2
compiler/Generate/JavaScript.hs+2−3
@@ -12,7 +12,6 @@ import Generate.JavaScript.Helpers
1212import qualified Generate.Cases as Case
1313import qualified Generate.JavaScript.Ports as Port
1414import qualified Generate.Markdown as MD
15−import qualified Parse.Helpers as PHelp
1615import qualified SourceSyntax.Helpers as Help
1716import SourceSyntax.Literal
1817import SourceSyntax.Pattern as Pattern
@@ -312,7 +311,7 @@ generate unsafeModule =
312311
313312 jsImport modul = setup Nothing path ++ [ include ]
314313 where
315− path = PHelp.splitDots modul
314+ path = Help.splitDots modul
316315 include = assign path $ dotSep ("Elm" : path ++ ["make"]) <| ref "_elm"
317316
318317 setup namespace path = map create paths
@@ -352,7 +351,7 @@ binop span op e1 e2 =
352351 func | Help.isOp operator = BracketRef () (dotSep (init parts ++ ["_op"])) (string operator)
353352 | otherwise = dotSep parts
354353 where
355− parts = PHelp.splitDots op
354+ parts = Help.splitDots op
356355 operator = last parts
357356
358357 opDict = Map.fromList (infixOps ++ specialOps)
compiler/Parse/Helpers.hs−10
@@ -18,16 +18,6 @@ import SourceSyntax.Expression
1818import SourceSyntax.PrettyPrint
1919import SourceSyntax.Declaration (Assoc)
2020
21−splitDots :: String -> [String]
22−splitDots = go []
23− where
24− go vars str =
25− case break (=='.') str of
26− (x,'.':rest) | Help.isOp x -> vars ++ [x ++ '.' : rest]
27− | otherwise -> go (vars ++ [x]) rest
28− (x,[]) -> vars ++ [x]
29−
30−
3121reserveds = [ "if", "then", "else"
3222 , "case", "of"
3323 , "let", "in"
compiler/SourceSyntax/Helpers.hs+9
@@ -3,6 +3,15 @@ module SourceSyntax.Helpers where
33
44import qualified Data.Char as Char
55
6+splitDots :: String -> [String]
7+splitDots = go []
8+ where
9+ go vars str =
10+ case break (=='.') str of
11+ (x,_:rest) | isOp x -> vars ++ [x ++ '.' : rest]
12+ | otherwise -> go (vars ++ [x]) rest
13+ (x,[]) -> vars ++ [x]
14+
615brkt :: String -> String
716brkt s = "{ " ++ s ++ " }"
817
compiler/Transform/SafeNames.hs+3−2
@@ -5,15 +5,16 @@ import Control.Arrow (first, (***))
55import Data.List (intercalate)
66
77import qualified Data.Set as Set
8−import qualified Parse.Helpers as PHelp
98
9+import qualified Parse.Helpers as PHelp
1010import SourceSyntax.Expression
11+import qualified SourceSyntax.Helpers as SHelp
1112import SourceSyntax.Location
1213import SourceSyntax.Module
1314import SourceSyntax.Pattern
1415
1516var :: String -> String
16−var = intercalate "." . map (dereserve . deprime) . PHelp.splitDots
17+var = intercalate "." . map (dereserve . deprime) . SHelp.splitDots
1718 where
1819 deprime = map (\c -> if c == '\'' then '$' else c)
1920 dereserve x = case Set.member x PHelp.jsReserveds of