@@ -8,7 +8,7 @@ import Parse.Helpers
88import SourceSyntax.Module (ImportMethod(..), Imports)
99
1010varList :: IParser [String]
11−varList = parens $ commaSep1 (var <|> parens symOp)
11+varList = commaSep1 (var <|> parens symOp)
1212
1313getModuleName :: String -> Maybe String
1414getModuleName source =
@@ -27,7 +27,7 @@ moduleDef = do
2727 whitespace
2828 names <- dotSep1 capVar <?> "name of module"
2929 whitespace
30− exports <- option [] varList
30+ exports <- option [] (parens varList)
3131 whitespace <?> "reserved word 'where'"
3232 reserved "where"
3333 return (names, exports)
@@ -38,17 +38,22 @@ imports = option [] ((:) <$> import' <*> many (try (freshLine >> import')))
3838import' :: IParser (String, ImportMethod)
3939import' =
4040 do reserved "import"
41− whitespace
42− open <- optionMaybe (reserved "open")
4341 whitespace
4442 name <- intercalate "." <$> dotSep1 capVar
45− case open of
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
4944 where
45+ method :: IParser ImportMethod
46+ method = try $ do whitespace
47+ as' <|> importing'
48+
5049 as' :: IParser ImportMethod
51− as' = reserved "as" >> whitespace >> As <$> capVar <?> "alias for module"
50+ as' = do
51+ reserved "as"
52+ whitespace
53+ As <$> capVar <?> "alias for module"
5254
5355 importing' :: IParser ImportMethod
54− importing' = Importing <$> varList <?> "listing of imported values (x,y,z)"
56+ importing' =
57+ parens (choice [ const (Hiding []) <$> string ".."
58+ , Importing <$> varList
59+ ] <?> "listing of imported values (x,y,z)")