on master help sign in
Assume all variables with the "Native." prefix exist and have type "a"
666d9f8Evan Czaplicki
compiler/Type/Solve.hs+9−2
@@ -7,6 +7,7 @@ import qualified Data.UnionFind.IO as UF
7import qualified Data.Map as Map
7import qualified Data.Map as Map
8import qualified Data.Traversable as Traversable
8import qualified Data.Traversable as Traversable
9import qualified Data.Maybe as Maybe
9import qualified Data.Maybe as Maybe
10+import qualified Data.List as List
10import Type.Type
11import Type.Type
11import Type.Unify
12import Type.Unify
12import qualified Type.Environment as Env
13import qualified Type.Environment as Env
@@ -118,8 +119,14 @@ solve constraint =
118
119
119 CInstance name term -> do
120 CInstance name term -> do
120 env <- TS.getEnv
121 env <- TS.getEnv
122+ freshCopy <-
123+ case Map.lookup name env of
124+ Just tipe -> TS.makeInstance tipe
125+ Nothing
126+ | List.isPrefixOf "Native." name -> liftIO flexibleVar
127+ | otherwise ->
121− let msg = "Could not find '" ++ name ++ "' when solving type constraints."
128+ error ("Could not find '" ++ name ++ "' when solving type constraints.")
122− freshCopy <- TS.makeInstance (Map.findWithDefault (error msg) name env)
129+
123 t <- TS.flatten term
130 t <- TS.flatten term
124 unify freshCopy t
131 unify freshCopy t
125
132