Prevent infinite loop unifying variable with itself

This commit is contained in:
Joscha 2020-12-14 13:59:13 +00:00
parent 09a42340fc
commit f0e291a84d

View file

@ -93,11 +93,12 @@ unifyTerm t1 t2 = do
t1' <- lookupTerm t1 t1' <- lookupTerm t1
t2' <- lookupTerm t2 t2' <- lookupTerm t2
case (t1', t2') of case (t1', t2') of
(TStat s1, TStat s2) -> unifyStat s1 s2 (TStat s1, TStat s2) -> unifyStat s1 s2
(TInt i1, TInt i2) -> guard $ i1 == i2 (TInt i1, TInt i2) -> guard $ i1 == i2
(TVar v, t) -> bindTerm v t (TVar v, TVar w) | v == w -> pure ()
(t, TVar v) -> bindTerm v t (TVar v, t) -> bindTerm v t
(_, _) -> empty (t, TVar v) -> bindTerm v t
(_, _) -> empty
unifyTerms :: [Term Int] -> [Term Int] -> UniM () unifyTerms :: [Term Int] -> [Term Int] -> UniM ()
unifyTerms t1 t2 = do unifyTerms t1 t2 = do