on master help sign in
Whitespace upgrade + handle bools in patterns
bede6f3Evan Czaplicki
src/Parse/Pattern.hs+29−20
@@ -4,6 +4,7 @@ module Parse.Pattern (term, expression) where
4
4
5import Data.Text (Text)
5import Data.Text (Text)
6
6
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 =
35
36
36mkCtor :: Text -> P.Raw'
37mkCtor :: Text -> P.Raw'
37mkCtor ctor =
38mkCtor ctor =
39+ case ctor of
40+ "True" ->
41+ P.Literal (L.Boolean True)
42+
43+ "False" ->
44+ P.Literal (L.Boolean False)
45+
46+ _ ->
38− P.Ctor (Var.Raw ctor) []
47+ P.Ctor (Var.Raw ctor) []
39
48
40
49
41
50
@@ -79,8 +88,8 @@ tuple =
79 leftParen
88 leftParen
80 spaces
89 spaces
81 oneOf
90 oneOf
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 =
93 oneOf
102 oneOf
94 [ do comma
103 [ do comma
95 spaces
104 spaces
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
117 spaces
126 spaces
118 oneOf
127 oneOf
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 =
130 oneOf
139 oneOf
131 [ do comma
140 [ do comma
132 spaces
141 spaces
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
144
153
145
154
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
151
160
152
161
153−consTerm :: Parser (P.Raw, R.Position, Space)
162+consTerm :: SParser P.Raw
154consTerm =
163consTerm =
155 oneOf
164 oneOf
156 [ do start <- getPosition
165 [ do start <- getPosition
@@ -160,15 +169,15 @@ consTerm =
160 ]
169 ]
161
170
162
171
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) =
165 oneOf
174 oneOf
166− [ do checkSpaces space
175+ [ do checkSpace sPos
167 cons
176 cons
168 spaces
177 spaces
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"
173 spaces
182 spaces
174 alias <- lowVar
183 alias <- lowVar
@@ -180,7 +189,7 @@ exprHelp start patterns (pattern, end, space) =
180 )
189 )
181 , return
190 , return
182 ( foldl (consHelp end) pattern patterns
191 ( foldl (consHelp end) pattern patterns
183− , space
192+ , sPos
184 )
193 )
185 ]
194 ]
186
195
@@ -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])
191
200
192
201
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
197 oneOf
206 oneOf
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)
201 , return
210 , return
202 ( A.at start end (P.Ctor (Var.Raw ctor) (reverse args))
211 ( A.at start end (P.Ctor (Var.Raw ctor) (reverse args))
203 , end
212 , end
204− , space
213+ , sPos
205 )
214 )
206 ]
215 ]