@@ -1,4 +1,4 @@
1−module Parse.Expression (def, term, typeAnnotation, expr) where
1+module Parse.Expression (term, typeAnnotation, definition, expr) where
22
33import Control.Applicative ((<$>), (<*>))
44import qualified Data.List as List
@@ -232,25 +232,16 @@ letExpr :: IParser Source.Expr'
232232letExpr =
233233 do try (reserved "let")
234234 whitespace
235− defs <- defSet
235+ defs <-
236+ block $
237+ do def <- typeAnnotation <|> definition
238+ whitespace
239+ return def
236240 padded (reserved "in")
237241 E.Let defs <$> expr
238242
239243
240−defSet :: IParser [Source.Def]
241−defSet =
242− block $
243− do d <- def
244− whitespace
245− return d
246−
247−
248−-- DEFINITIONS
249−
250−def :: IParser Source.Def
251−def =
252− typeAnnotation <|> definition
253−
244+-- TYPE ANNOTATION
254245
255246typeAnnotation :: IParser Source.Def
256247typeAnnotation =
@@ -262,6 +253,8 @@ typeAnnotation =
262253 return v
263254
264255
256+-- DEFINITION
257+
265258definition :: IParser Source.Def
266259definition =
267260 withPos $
@@ -299,4 +292,3 @@ defStart =
299292 if o == '`'
300293 then [ P.Var $ takeWhile (/='`') p, p1, p2 ]
301294 else [ P.Var (o:p), p1, p2 ]
302−