elm/compiler/Types/Unify.hs

28 lines
881 B
Haskell
Raw Normal View History

module Types.Unify (unify) where
import Control.Monad (liftM)
import qualified Data.Map as Map
import SourceSyntax.Module
import Unique
2013-05-28 13:47:36 +00:00
import qualified Types.Constrain as Constrain
import qualified Types.Solver as Solver
import qualified Types.Alias as Alias
import qualified Types.Substitutions as Subst
import System.IO.Unsafe
import Control.Arrow (second)
2013-04-05 16:55:30 +00:00
unify hints modul@(Module _ _ _ stmts) = run $ do
result <- Constrain.constrain hints modul
case result of
Left err -> return (Left err)
Right (schemes, constraints) ->
do subs <- {- unsafePerformIO (mapM print constraints) `seq` -}
Solver.solver (Alias.get stmts) Map.empty constraints
let ss = either (const []) Map.toList subs
-- unsafePerformIO (mapM print . map (second (Subst.subst ss)) $ concatMap Map.toList schemes) `seq`
return subs