on master help sign in
Get rid of duplicate type alias for RawPattern
02d6b4eEvan Czaplicki
compiler/Parse/Expression.hs+2−2
@@ -198,7 +198,7 @@ expr = addLocation (choice [ ifExpr, letExpr, caseExpr ])
198 <|> binaryExpr
198 <|> binaryExpr
199 <?> "an expression"
199 <?> "an expression"
200
200
201−defStart :: IParser [Pattern.RawPattern]
201+defStart :: IParser [P.RawPattern]
202defStart =
202defStart =
203 choice [ do p1 <- try Pattern.term
203 choice [ do p1 <- try Pattern.term
204 infics p1 <|> func p1
204 infics p1 <|> func p1
@@ -218,7 +218,7 @@ defStart =
218 return $ if o == '`' then [ P.Var $ takeWhile (/='`') p, p1, p2 ]
218 return $ if o == '`' then [ P.Var $ takeWhile (/='`') p, p1, p2 ]
219 else [ P.Var (o:p), p1, p2 ]
219 else [ P.Var (o:p), p1, p2 ]
220
220
221−makeFunction :: [Pattern.RawPattern] -> Source.Expr -> Source.Expr
221+makeFunction :: [P.RawPattern] -> Source.Expr -> Source.Expr
222makeFunction args body@(A ann _) =
222makeFunction args body@(A ann _) =
223 foldr (\arg body' -> A ann $ Lambda arg body') body args
223 foldr (\arg body' -> A ann $ Lambda arg body') body args
224
224
compiler/Parse/Pattern.hs+9−11
@@ -1,5 +1,5 @@
1{-# OPTIONS_GHC -W #-}
1{-# OPTIONS_GHC -W #-}
2−module Parse.Pattern (term, expr, RawPattern) where
2+module Parse.Pattern (term, expr) where
3
3
4import Control.Applicative ((<$>))
4import Control.Applicative ((<$>))
5import Data.Char (isUpper)
5import Data.Char (isUpper)
@@ -12,9 +12,7 @@ import AST.Literal
12import qualified AST.Pattern as P
12import qualified AST.Pattern as P
13import qualified AST.Variable as Var
13import qualified AST.Variable as Var
14
14
15−type RawPattern = P.Pattern Var.Raw
16−
17−basic :: IParser RawPattern
15+basic :: IParser P.RawPattern
18basic = choice
16basic = choice
19 [ char '_' >> return P.Anything
17 [ char '_' >> return P.Anything
20 , do v <- var
18 , do v <- var
@@ -26,31 +24,31 @@ basic = choice
26 , P.Literal <$> literal
24 , P.Literal <$> literal
27 ]
25 ]
28
26
29−asPattern :: RawPattern -> IParser RawPattern
27+asPattern :: P.RawPattern -> IParser P.RawPattern
30asPattern pattern = do
28asPattern pattern = do
31 var <- optionMaybe (try (whitespace >> reserved "as" >> whitespace >> lowVar))
29 var <- optionMaybe (try (whitespace >> reserved "as" >> whitespace >> lowVar))
32 return $ case var of
30 return $ case var of
33 Just v -> P.Alias v pattern
31 Just v -> P.Alias v pattern
34 Nothing -> pattern
32 Nothing -> pattern
35
33
36−record :: IParser RawPattern
34+record :: IParser P.RawPattern
37record = P.Record <$> brackets (commaSep1 lowVar)
35record = P.Record <$> brackets (commaSep1 lowVar)
38
36
39−tuple :: IParser RawPattern
37+tuple :: IParser P.RawPattern
40tuple = do
38tuple = do
41 ps <- parens (commaSep expr)
39 ps <- parens (commaSep expr)
42 return $ case ps of
40 return $ case ps of
43 [p] -> p
41 [p] -> p
44 _ -> P.tuple ps
42 _ -> P.tuple ps
45
43
46−list :: IParser RawPattern
44+list :: IParser P.RawPattern
47list = P.list <$> braces (commaSep expr)
45list = P.list <$> braces (commaSep expr)
48
46
49−term :: IParser RawPattern
47+term :: IParser P.RawPattern
50term =
48term =
51 (choice [ record, tuple, list, basic ]) <?> "pattern"
49 (choice [ record, tuple, list, basic ]) <?> "pattern"
52
50
53−patternConstructor :: IParser RawPattern
51+patternConstructor :: IParser P.RawPattern
54patternConstructor = do
52patternConstructor = do
55 v <- List.intercalate "." <$> dotSep1 capVar
53 v <- List.intercalate "." <$> dotSep1 capVar
56 case v of
54 case v of
@@ -58,7 +56,7 @@ patternConstructor = do
58 "False" -> return $ P.Literal (Boolean False)
56 "False" -> return $ P.Literal (Boolean False)
59 _ -> P.Data (Var.Raw v) <$> spacePrefix term
57 _ -> P.Data (Var.Raw v) <$> spacePrefix term
60
58
61−expr :: IParser RawPattern
59+expr :: IParser P.RawPattern
62expr = do
60expr = do
63 patterns <- consSep1 (patternConstructor <|> term)
61 patterns <- consSep1 (patternConstructor <|> term)
64 asPattern (foldr1 P.cons patterns) <?> "pattern"
62 asPattern (foldr1 P.cons patterns) <?> "pattern"