@@ -4,6 +4,7 @@ module Type.Inference where
44import Control.Arrow (first, second)
55import Control.Monad.Except (Except, forM, liftIO, runExceptT, throwError)
66import qualified Data.Map as Map
7+import qualified Data.Set as Set
78import Data.Monoid ((<>))
89import Data.Text (Text)
910
@@ -46,7 +47,7 @@ genConstraints
4647 :: Module.Interfaces
4748 -> Module.Canonical
4849 -> IO (Map.Map Text T.Type, T.Constraint)
49−genConstraints interfaces modul =
50+genConstraints interfaces modul@(Module.Module _ info) =
5051 do let env = Env.initialize (canonicalizeUnions interfaces modul)
5152
5253 ctors <-
@@ -57,7 +58,8 @@ genConstraints interfaces modul =
5758
5859 importedVars <-
5960 {-# SCC elm_compiler_mk_value_types #-}
60− mapM (canonicalizeValues env) (Map.toList interfaces)
61+ forM (Map.toList interfaces) $
62+ canonicalizeValues env (Set.fromList (Module.imports info))
6163
6264 let allTypes = concat (ctors : importedVars)
6365 let vars = concatMap (fst . snd) allTypes
@@ -68,24 +70,28 @@ genConstraints interfaces modul =
6870
6971 constraint <-
7072 {-# SCC elm_compiler_constrain #-}
71− TcExpr.constrain env (Module.program (Module.info modul)) (T.VarN fvar)
73+ TcExpr.constrain env (Module.program info) (T.VarN fvar)
7274
7375 return (header, environ constraint)
7476
7577
7678canonicalizeValues
7779 :: Env.Env
80+ -> Set.Set ModuleName.Raw
7881 -> (ModuleName.Canonical, Module.Interface)
7982 -> IO [(Text, ([T.Variable], T.Type))]
80−canonicalizeValues env (moduleName, iface) =
83+canonicalizeValues env imports (moduleName@(ModuleName.Canonical _ rawName), iface) =
84+ if Set.notMember rawName imports then
85+ return []
86+ else
8187 forM (Map.toList (Module.iTypes iface)) $ \(name, tipe) ->
82− do (flexType, flexVars) <- Env.instantiateFlex env tipe
83− return
84− ( ModuleName.canonicalToText moduleName <> "." <> name
85− , ( Map.elems flexVars
86− , flexType
87− )
88+ do (flexType, flexVars) <- Env.instantiateFlex env tipe
89+ return
90+ ( ModuleName.canonicalToText moduleName <> "." <> name
91+ , ( Map.elems flexVars
92+ , flexType
8893 )
94+ )
8995
9096
9197canonicalizeUnions :: Module.Interfaces -> Module.Canonical -> [Module.CanonicalUnion]