elm/compiler/Types/Unify.hs
evancz 721ce4f192 Continue reorganizing the code-base.
Remove uses of uniplate, introduces a regression in testing the ordering of Defs in let-expressions.
2013-06-13 22:45:08 -07:00

27 lines
875 B
Haskell

module Types.Unify (unify) where
import Control.Monad (liftM)
import qualified Data.Map as Map
import SourceSyntax.Module
import Unique
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)
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