on a3801ac help sign in
elk/compiler/Types/Unify.hs
25 lines 777 B history raw
2module Types.Unify (unify) where
4import Control.Monad (liftM)
5import qualified Data.Map as Map
7import Ast
8import Guid
9import qualified Types.Constrain as Constrain
10import qualified Types.Solver as Solver
11import qualified Types.Alias as Alias
13import qualified Types.Substitutions as Subst
14import System.IO.Unsafe
15import Control.Arrow (second)
17unify hints modul@(Module _ _ _ stmts) = run $ do
18 result <- Constrain.constrain hints modul
19 case result of
20 Left err -> return (Left err)
21 Right (schemes, constraints) ->
22 do subs <- Solver.solver (Alias.get stmts) Map.empty constraints
23 let ss = either (const []) Map.toList subs
24 unsafePerformIO (mapM print . map (second (Subst.subst ss)) $ concatMap Map.toList schemes) `seq` return subs