From: Tomáš Musil Date: Sun, 6 Sep 2015 16:28:10 +0000 (+0200) Subject: fix bug in unification X-Git-Url: http://git.tomasm.cz/fp.git/commitdiff_plain/33464c9ce7b0b1559f8cb23734065b8ecdd382c1?ds=sidebyside;hp=94f9e5a83598d189b1dd90d4fec0927622a8b778 fix bug in unification --- diff --git a/src/HM.hs b/src/HM.hs index e643938..9591706 100644 --- a/src/HM.hs +++ b/src/HM.hs @@ -86,7 +86,7 @@ unify (TypeVar a) t = varBind a t unify t (TypeVar a) = varBind a t unify (TypeFunction a b) (TypeFunction a' b') = do s1 <- unify a a' - s2 <- unify b b' + s2 <- unify (substituteT s1 b) (substituteT s1 b') return $ s1 `composeSub` s2 unify (Primitive a) (Primitive b) | a == b = return idSub unify a b = fail $ "cannot unify " ++ show a ++ " with " ++ show b @@ -127,7 +127,6 @@ ti e (NTTerm (Let x a b)) = do e' = Map.insert x t' e (s2, t2) <- ti (Map.map (substituteS s1) e') b return (s1 `composeSub` s2, t2) - algW :: TypedTerm -> Either String Type algW t = fst . runTI $ do