@@ -8,7 +8,7 @@ import Parse.Helpers
8import SourceSyntax.Module (ImportMethod(..), Imports)
8import SourceSyntax.Module (ImportMethod(..), Imports)
10varList :: IParser [String]
10varList :: IParser [String]
11−varList = parens $ commaSep1 (var <|> parens symOp)
11+varList = commaSep1 (var <|> parens symOp)
13getModuleName :: String -> Maybe String
13getModuleName :: String -> Maybe String
14getModuleName source =
14getModuleName source =
@@ -27,7 +27,7 @@ moduleDef = do
27 whitespace
27 whitespace
28 names <- dotSep1 capVar <?> "name of module"
28 names <- dotSep1 capVar <?> "name of module"
29 whitespace
29 whitespace
30− exports <- option [] varList
30+ exports <- option [] (parens varList)
31 whitespace <?> "reserved word 'where'"
31 whitespace <?> "reserved word 'where'"
32 reserved "where"
32 reserved "where"
33 return (names, exports)
33 return (names, exports)
@@ -38,17 +38,22 @@ imports = option [] ((:) <$> import' <*> many (try (freshLine >> import')))
38import' :: IParser (String, ImportMethod)
38import' :: IParser (String, ImportMethod)
40 do reserved "import"
40 do reserved "import"
42− open <- optionMaybe (reserved "open")
43 whitespace
41 whitespace
44 name <- intercalate "." <$> dotSep1 capVar
42 name <- intercalate "." <$> dotSep1 capVar
46− Just _ -> return (name, Hiding [])
47− Nothing -> let how = try (whitespace >> (as' <|> importing'))
48− in (,) name <$> option (As name) how
43+ (,) name <$> option (As name) method
45+ method :: IParser ImportMethod
46+ method = try $ do whitespace
50 as' :: IParser ImportMethod
49 as' :: IParser ImportMethod
51− as' = reserved "as" >> whitespace >> As <$> capVar <?> "alias for module"
53+ As <$> capVar <?> "alias for module"
53 importing' :: IParser ImportMethod
55 importing' :: IParser ImportMethod
57+ parens (choice [ const (Hiding []) <$> string ".."
58+ , Importing <$> varList
54− importing' = Importing <$> varList <?> "listing of imported values (x,y,z)"
59+ ] <?> "listing of imported values (x,y,z)")