@@ -1,5 +1,5 @@
11{-# OPTIONS_GHC -W #-}
2−module Parse.Pattern (term, expr, RawPattern) where
2+module Parse.Pattern (term, expr) where
33
44import Control.Applicative ((<$>))
55import Data.Char (isUpper)
@@ -12,9 +12,7 @@ import AST.Literal
1212import qualified AST.Pattern as P
1313import qualified AST.Variable as Var
1414
15−type RawPattern = P.Pattern Var.Raw
16−
17−basic :: IParser RawPattern
15+basic :: IParser P.RawPattern
1816basic = choice
1917 [ char '_' >> return P.Anything
2018 , do v <- var
@@ -26,31 +24,31 @@ basic = choice
2624 , P.Literal <$> literal
2725 ]
2826
29−asPattern :: RawPattern -> IParser RawPattern
27+asPattern :: P.RawPattern -> IParser P.RawPattern
3028asPattern pattern = do
3129 var <- optionMaybe (try (whitespace >> reserved "as" >> whitespace >> lowVar))
3230 return $ case var of
3331 Just v -> P.Alias v pattern
3432 Nothing -> pattern
3533
36−record :: IParser RawPattern
34+record :: IParser P.RawPattern
3735record = P.Record <$> brackets (commaSep1 lowVar)
3836
39−tuple :: IParser RawPattern
37+tuple :: IParser P.RawPattern
4038tuple = do
4139 ps <- parens (commaSep expr)
4240 return $ case ps of
4341 [p] -> p
4442 _ -> P.tuple ps
4543
46−list :: IParser RawPattern
44+list :: IParser P.RawPattern
4745list = P.list <$> braces (commaSep expr)
4846
49−term :: IParser RawPattern
47+term :: IParser P.RawPattern
5048term =
5149 (choice [ record, tuple, list, basic ]) <?> "pattern"
5250
53−patternConstructor :: IParser RawPattern
51+patternConstructor :: IParser P.RawPattern
5452patternConstructor = do
5553 v <- List.intercalate "." <$> dotSep1 capVar
5654 case v of
@@ -58,7 +56,7 @@ patternConstructor = do
5856 "False" -> return $ P.Literal (Boolean False)
5957 _ -> P.Data (Var.Raw v) <$> spacePrefix term
6058
61−expr :: IParser RawPattern
59+expr :: IParser P.RawPattern
6260expr = do
6361 patterns <- consSep1 (patternConstructor <|> term)
6462 asPattern (foldr1 P.cons patterns) <?> "pattern"