@@ -12,26 +12,23 @@ import Parse.Binop (infixStmt, OpTable)
12import Parse.Expression
12import Parse.Expression
13import Parse.Type
13import Parse.Type
14import Parse.Module
14import Parse.Module
15−import Parse.Foreign
15+import qualified Parse.Declaration as Decl
17−statement = choice (typeAlias:defs) <|> def <?> "datatype or variable definition"
18− where defs = map ((:[]) <$>) [ foreignDef, datatype ]
20freshDef = commitIf (freshLine >> (letter <|> char '_')) $ do
17freshDef = commitIf (freshLine >> (letter <|> char '_')) $ do
22− statement <?> "another datatype or variable definition"
19+ Decl.declaration <?> "another datatype or variable definition"
24−defs1 = do d <- statement <?> "at least one datatype or variable definition"
21+decls = do d <- Decl.declaration <?> "at least one datatype or variable definition"
25− concat <$> (d:) <$> many freshDef
22+ (d:) <$> many freshDef
27program = do
24program = do
28 optional freshLine
25 optional freshLine
29 (names,exports) <- option (["Main"],[]) (moduleDef `followedBy` freshLine)
26 (names,exports) <- option (["Main"],[]) (moduleDef `followedBy` freshLine)
30 is <- (do try (lookAhead $ reserved "import")
27 is <- (do try (lookAhead $ reserved "import")
31 imports `followedBy` freshLine) <|> return []
28 imports `followedBy` freshLine) <|> return []
32− statements <- defs1
29+ declarations <- decls
33 optional freshLine ; optional spaces ; eof
30 optional freshLine ; optional spaces ; eof
34− return $ Module names exports is statements
31+ return $ Module names exports is declarations
36parseProgram = setupParser program
33parseProgram = setupParser program