on master help sign in
Filter out kernels when figuring out available imports
commit2f44d9fe3735dc2de7c1f9a0286b05ebe128ddeb authorEvan Czaplicki <evancz@users.noreply.github.com> dateSun 24 Mar 2019, 14:57 (8 years ago) parent6ebce70
1 file changed+24−1
compiler/src/Canonicalize/Environment/Foreign.hs+24−1
compiler/src/Canonicalize/Environment/Foreign.hs+24−1
@@ -18,6 +18,7 @@ import qualified AST.Source as Src
1818import qualified Canonicalize.Environment as Env
1919import qualified Elm.Interface as I
2020import qualified Elm.ModuleName as ModuleName
21+import qualified Elm.Package as Pkg
2122import qualified Reporting.Annotation as A
2223import qualified Reporting.Error.Canonicalize as Error
2324import qualified Reporting.Result as Result
@@ -33,7 +34,7 @@ type Result i w a =
3334
3435createInitialEnv :: ModuleName.Canonical -> Map.Map ModuleName.Raw I.Interface -> [Src.Import] -> Result i w Env.Env
3536createInitialEnv home ifaces imports =
36− do (State vs ts cs bs qvs qts qcs) <- foldM (addImport ifaces) emptyState imports
37+ do (State vs ts cs bs qvs qts qcs) <- foldM (addImport ifaces) emptyState (toSafeImports home imports)
3738 Result.ok (Env.Env home (Map.map Env.Foreign vs) ts cs bs qvs qts qcs)
3839
3940
@@ -64,6 +65,28 @@ emptyTypes =
6465
6566
6667
68+-- TO SAFE IMPORTS
69+
70+
71+toSafeImports :: ModuleName.Canonical -> [Src.Import] -> [Src.Import]
72+toSafeImports (ModuleName.Canonical pkg _) imports =
73+ if Pkg.isKernel pkg
74+ then filter isNormal imports
75+ else imports
76+
77+
78+isNormal :: Src.Import -> Bool
79+isNormal (Src.Import (A.At _ name) maybeAlias _) =
80+ if Name.isKernel name
81+ then
82+ case maybeAlias of
83+ Nothing -> False
84+ Just _ -> error "kernel imports cannot use `as`"
85+ else
86+ True
87+
88+
89+
6790-- ADD IMPORTS
6891
6992