module Types.Unify (unify) where

import Control.Monad (liftM)
import qualified Data.Map as Map

import Ast
import Guid
import Types.Constrain
import Types.Solver
import Types.Alias as Alias

unify hints modul@(Module _ _ _ stmts) = run $ do
  constraints <- constrain hints modul
  either (return . Left) (solver (Alias.get stmts) Map.empty) constraints