@@ -4,6 +4,7 @@ module Parse.Pattern (term, expression) where
5import Data.Text (Text)
5import Data.Text (Text)
7+import qualified AST.Literal as L
7import qualified AST.Pattern as P
8import qualified AST.Pattern as P
8import qualified AST.Variable as Var
9import qualified AST.Variable as Var
9import Parse.Helpers
10import Parse.Helpers
@@ -35,7 +36,15 @@ termHelp =
36mkCtor :: Text -> P.Raw'
37mkCtor :: Text -> P.Raw'
37mkCtor ctor =
38mkCtor ctor =
41+ P.Literal (L.Boolean True)
44+ P.Literal (L.Boolean False)
38− P.Ctor (Var.Raw ctor) []
47+ P.Ctor (Var.Raw ctor) []
@@ -79,8 +88,8 @@ tuple =
82− [ do (pattern, space) <- expression
91+ [ do (pattern, sPos) <- expression
83− checkSpaces space
92+ checkSpace sPos
84 tupleHelp start [pattern]
93 tupleHelp start [pattern]
85 , do rightParen
94 , do rightParen
86 end <- getPosition
95 end <- getPosition
@@ -93,8 +102,8 @@ tupleHelp start patterns =
94 [ do comma
103 [ do comma
96− (pattern, space) <- expression
105+ (pattern, sPos) <- expression
97− checkSpaces space
106+ checkSpace sPos
98 tupleHelp start (pattern:patterns)
107 tupleHelp start (pattern:patterns)
99 , do rightParen
108 , do rightParen
100 case patterns of
109 case patterns of
@@ -116,8 +125,8 @@ list =
116 do leftSquare
125 do leftSquare
119− [ do (pattern, space) <- expression
128+ [ do (pattern, sPos) <- expression
120− checkSpaces space
129+ checkSpace sPos
121 listHelp [pattern]
130 listHelp [pattern]
122 , do rightSquare
131 , do rightSquare
123 end <- getPosition
132 end <- getPosition
@@ -130,8 +139,8 @@ listHelp patterns =
131 [ do comma
140 [ do comma
133− (pattern, space) <- expression
142+ (pattern, sPos) <- expression
134− checkSpaces space
143+ checkSpace sPos
135 listHelp (pattern:patterns)
144 listHelp (pattern:patterns)
136 , do end <- getPosition
145 , do end <- getPosition
137 rightSquare
146 rightSquare
@@ -143,14 +152,14 @@ listHelp patterns =
143-- PATTERN EXPRESSION
152-- PATTERN EXPRESSION
146−expression :: Parser (P.Raw, Space)
155+expression :: Parser (P.Raw, SPos)
147expression =
156expression =
148 do start <- getPosition
157 do start <- getPosition
149 cTerm <- consTerm
158 cTerm <- consTerm
150 exprHelp start [] cTerm
159 exprHelp start [] cTerm
153−consTerm :: Parser (P.Raw, R.Position, Space)
162+consTerm :: SParser P.Raw
154consTerm =
163consTerm =
156 [ do start <- getPosition
165 [ do start <- getPosition
@@ -160,15 +169,15 @@ consTerm =
163−exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, Space) -> Parser (P.Raw, Space)
172+exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, SPos) -> Parser (P.Raw, SPos)
164−exprHelp start patterns (pattern, end, space) =
173+exprHelp start patterns (pattern, end, sPos) =
166− [ do checkSpaces space
175+ [ do checkSpace sPos
169 cTerm <- consTerm
178 cTerm <- consTerm
170 exprHelp start (pattern:patterns) cTerm
179 exprHelp start (pattern:patterns) cTerm
171− , do checkSpaces space
180+ , do checkSpace sPos
172 keyword "as"
181 keyword "as"
174 alias <- lowVar
183 alias <- lowVar
@@ -180,7 +189,7 @@ exprHelp start patterns (pattern, end, space) =
182 ( foldl (consHelp end) pattern patterns
191 ( foldl (consHelp end) pattern patterns
@@ -190,17 +199,17 @@ consHelp end tl hd@(A.A (R.Region start _) _) =
190 A.at start end (P.Ctor (Var.Raw "::") [hd, tl])
199 A.at start end (P.Ctor (Var.Raw "::") [hd, tl])
193−constructorHelp :: R.Position -> Text -> [P.Raw] -> Parser (P.Raw, R.Position, Space)
202+constructorHelp :: R.Position -> Text -> [P.Raw] -> SParser P.Raw
194constructorHelp start ctor args =
203constructorHelp start ctor args =
195 do end <- getPosition
204 do end <- getPosition
196− space <- whitespace
205+ sPos <- whitespace
198− [ do checkSpaces space
207+ [ do checkSpace sPos
199 arg <- term
208 arg <- term
200 constructorHelp start ctor (arg:args)
209 constructorHelp start ctor (arg:args)
202 ( A.at start end (P.Ctor (Var.Raw ctor) (reverse args))
211 ( A.at start end (P.Ctor (Var.Raw ctor) (reverse args))