module Types.Unify (unify) where

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

import Guid
import Types.Constrain
import Types.Solver

unify hints modul = run $ do
  constraints <- constrain hints modul
  case constraints of
    Left msg -> return (Left msg)
    Right (escapees, cs) ->
        do subs <- solver cs Map.empty
           return $ do ss <- subs
                       return (escapees, ss)