on master help sign in
Add `open` keyword to import everything. Default is now to just import the module, not to open it into local scope.
1f1187cevancz
compiler/Gen/CompileToJS.hs+2−1
@@ -99,10 +99,11 @@ jsImport (modul, how) =
99 Hiding vs -> include ++ " var hiding=" ++ (jsObj $ map (++":1") vs) ++
99 Hiding vs -> include ++ " var hiding=" ++ (jsObj $ map (++":1") vs) ++
100 "; for(var k in _){if(k in hiding)continue;" ++
100 "; for(var k in _){if(k in hiding)continue;" ++
101 "eval('var '+k+'=_[\"'+k+'\"]')}"
101 "eval('var '+k+'=_[\"'+k+'\"]')}"
102− Importing vs -> include ++ "\nvar " ++ intercalate ", " (map def vs) ++ ";"
102+ Importing vs -> include ++ named
103 where
103 where
104 imprt v = assign' v ("_." ++ v)
104 imprt v = assign' v ("_." ++ v)
105 def (o:p) = imprt (if isOp o then "$op['" ++ o:p ++ "']" else deprime (o:p))
105 def (o:p) = imprt (if isOp o then "$op['" ++ o:p ++ "']" else deprime (o:p))
106+ named = if null vs then "" else "\nvar " ++ intercalate ", " (map def vs) ++ ";"
106 where
107 where
107 include = "\nvar _ = Elm." ++ modul ++ parens "elm" ++ ";" ++ setup modul
108 include = "\nvar _ = Elm." ++ modul ++ parens "elm" ++ ";" ++ setup modul
108 setup moduleName = " var " ++ concatMap (++";") (defs ++ [assign' moduleName "_"])
109 setup moduleName = " var " ++ concatMap (++";") (defs ++ [assign' moduleName "_"])
compiler/Parse/Library.hs+1−1
@@ -16,7 +16,7 @@ reserveds = [ "if", "then", "else"
16 , "let", "in"
16 , "let", "in"
17 , "data", "type"
17 , "data", "type"
18 , "module", "where"
18 , "module", "where"
19− , "import", "as", "hiding"
19+ , "import", "as", "hiding", "open"
20 , "export", "foreign" ]
20 , "export", "foreign" ]
21
21
22expecting = flip (<?>)
22expecting = flip (<?>)
compiler/Parse/Modules.hs+6−2
@@ -30,9 +30,13 @@ import' :: IParser (String, ImportMethod)
30import' = do
30import' = do
31 reserved "import"
31 reserved "import"
32 whitespace
32 whitespace
33+ open <- optionMaybe (reserved "open")
34+ whitespace
33 name <- intercalate "." <$> dotSep1 capVar
35 name <- intercalate "." <$> dotSep1 capVar
36+ case open of
37+ Just _ -> return (name, Hiding [])
34− method <- option (Hiding []) $ try (whitespace >> (as' <|> importing'))
38+ Nothing -> let how = try (whitespace >> (as' <|> importing'))
35− return (name, method)
39+ in (,) name <$> option (Importing []) how
36
40
37
41
38as' :: IParser ImportMethod
42as' :: IParser ImportMethod