@@ -51,7 +51,7 @@ listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
52 range = do
52 range = do
53 lo <- expr
53 lo <- expr
54− whitespace >> string ".." >> whitespace
54+ padded (string "..")
55 Range lo <$> expr
55 Range lo <$> expr
57 markdown' = do
57 markdown' = do
@@ -66,9 +66,7 @@ listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
67 interpolation uid md exprs = do
67 interpolation uid md exprs = do
68 try (string "{{")
68 try (string "{{")
70− e <- expr
69+ e <- padded expr
72 string "}}"
70 string "}}"
73 return (md ++ span uid (length exprs), exprs ++ [e])
71 return (md ++ span uid (length exprs), exprs ++ [e])
@@ -100,7 +98,7 @@ recordTerm = brackets $ choice [ misc, addLocation record ]
100 where field = do
98 where field = do
101 label <- rLabel
99 label <- rLabel
102 patterns <- spacePrefix Pattern.term
100 patterns <- spacePrefix Pattern.term
103− whitespace >> string "=" >> whitespace
101+ padded equals
104 body <- expr
102 body <- expr
105 return (label, makeFunction patterns body)
103 return (label, makeFunction patterns body)
@@ -108,24 +106,21 @@ recordTerm = brackets $ choice [ misc, addLocation record ]
109 change = do
107 change = do
110 lbl <- rLabel
108 lbl <- rLabel
111− whitespace >> string "<-" >> whitespace
109+ padded (string "<-")
112 (,) lbl <$> expr
110 (,) lbl <$> expr
114 remove r = addLocation (string "-" >> whitespace >> Remove r <$> rLabel)
112 remove r = addLocation (string "-" >> whitespace >> Remove r <$> rLabel)
116 insert r = addLocation $ do
114 insert r = addLocation $ do
117 string "|" >> whitespace
115 string "|" >> whitespace
118− Insert r <$> rLabel <*>
116+ Insert r <$> rLabel <*> (padded equals >> expr)
119− (whitespace >> string "=" >> whitespace >> expr)
121 modify r = addLocation
118 modify r = addLocation
122 (string "|" >> whitespace >> Modify r <$> commaSep1 change)
119 (string "|" >> whitespace >> Modify r <$> commaSep1 change)
124 misc = try $ do
121 misc = try $ do
125 record <- addLocation (Var <$> rLabel)
122 record <- addLocation (Var <$> rLabel)
127− opt <- optionMaybe (remove record)
123+ opt <- padded (optionMaybe (remove record))
129 case opt of
124 case opt of
130 Just e -> try (insert e) <|> return e
125 Just e -> try (insert e) <|> return e
131 Nothing -> try (insert record) <|> try (modify record)
126 Nothing -> try (insert record) <|> try (modify record)
@@ -159,7 +154,7 @@ ifExpr = reserved "if" >> whitespace >> (normal <|> multiIf)
160 normal = do
155 normal = do
161 bool <- expr
156 bool <- expr
162− whitespace ; reserved "then" ; whitespace
157+ padded (reserved "then")
163 thenBranch <- expr
158 thenBranch <- expr
164 whitespace <?> "an 'else' branch" ; reserved "else" <?> "an 'else' branch" ; whitespace
159 whitespace <?> "an 'else' branch" ; reserved "else" <?> "an 'else' branch" ; whitespace
165 elseBranch <- expr
160 elseBranch <- expr
@@ -167,14 +162,14 @@ ifExpr = reserved "if" >> whitespace >> (normal <|> multiIf)
167 (Location.sameAs elseBranch (Var "otherwise"), elseBranch)]
162 (Location.sameAs elseBranch (Var "otherwise"), elseBranch)]
168 multiIf = MultiIf <$> spaceSep1 iff
163 multiIf = MultiIf <$> spaceSep1 iff
169 where iff = do string "|" ; whitespace
164 where iff = do string "|" ; whitespace
170− b <- expr ; whitespace ; string "->" ; whitespace
165+ b <- expr ; padded arrow
171 (,) b <$> expr
166 (,) b <$> expr
173lambdaExpr :: IParser (LExpr t v)
168lambdaExpr :: IParser (LExpr t v)
174lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
169lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
175 whitespace
170 whitespace
176 args <- spaceSep1 Pattern.term
171 args <- spaceSep1 Pattern.term
177− whitespace ; arrow ; whitespace
172+ padded arrow
178 body <- expr
173 body <- expr
179 return (makeFunction args body)
174 return (makeFunction args body)
@@ -185,14 +180,15 @@ letExpr :: IParser (Expr t v)
185letExpr = do
180letExpr = do
186 reserved "let" ; whitespace
181 reserved "let" ; whitespace
187 defs <- defSet
182 defs <- defSet
188− whitespace ; reserved "in" ; whitespace
183+ padded (reserved "in")
189 Let defs <$> expr
184 Let defs <$> expr
191caseExpr :: IParser (Expr t v)
186caseExpr :: IParser (Expr t v)
192caseExpr = do
187caseExpr = do
193− reserved "case"; whitespace; e <- expr; whitespace; reserved "of"; whitespace
188+ reserved "case"; e <- padded expr; reserved "of"; whitespace
194 Case e <$> (with <|> without)
189 Case e <$> (with <|> without)
195− where case_ = do p <- Pattern.expr; whitespace; arrow; whitespace
190+ where case_ = do p <- Pattern.expr
196 (,) p <$> expr
192 (,) p <$> expr
197 with = brackets (semiSep1 (case_ <?> "cases { x -> ... }"))
193 with = brackets (semiSep1 (case_ <?> "cases { x -> ... }"))
198 without = block (do c <- case_ ; whitespace ; return c)
194 without = block (do c <- case_ ; whitespace ; return c)
@@ -229,7 +225,7 @@ makeFunction args body@(L s _) =
229definition :: IParser (Def t v)
225definition :: IParser (Def t v)
230definition = withPos $ do
226definition = withPos $ do
231 (name:args) <- defStart
227 (name:args) <- defStart
232− whitespace >> string "=" >> whitespace
228+ padded equals
233 body <- expr
229 body <- expr
234 return . Def name $ makeFunction args body
230 return . Def name $ makeFunction args body
@@ -238,7 +234,7 @@ typeAnnotation = TypeAnnotation <$> try start <*> Type.expr
239 start = do
235 start = do
240 v <- lowVar <|> parens symOp
236 v <- lowVar <|> parens symOp
241− whitespace ; hasType ; whitespace
237+ padded hasType
244def :: IParser (Def t v)
240def :: IParser (Def t v)