, TypedTerm(..)
-- * Type inference
, algW
- , runTI
) where
import Control.Monad.Except
return (s1 `composeSub` s2, t2)
-algW :: TypedTerm -> TI Type
-algW t = do
+algW :: TypedTerm -> Either String Type
+algW t = fst . runTI $ do
(s, u) <- ti Map.empty t
return $ substituteT s u