From ff5ae6ab8ed907dcf6adc810791b756bab827ab3 Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Fri, 2 Feb 2007 23:36:34 +0000 Subject: [PATCH] Fix a pair of classic, but tricky, bugs in the type matcher; exposed by a program from Roman --- compiler/types/Unify.lhs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/types/Unify.lhs b/compiler/types/Unify.lhs index 5a1dbbc..34993ad 100644 --- a/compiler/types/Unify.lhs +++ b/compiler/types/Unify.lhs @@ -123,7 +123,7 @@ match menv subst ty1 ty2 | Just ty1' <- tcView ty1 = match menv subst ty1' ty2 | Just ty2' <- tcView ty2 = match menv subst ty1 ty2' match menv subst (TyVarTy tv1) ty2 - | tv1 `elemVarSet` me_tmpls menv + | tv1' `elemVarSet` me_tmpls menv = case lookupVarEnv subst tv1' of Nothing -- No existing binding | any (inRnEnvR rn_env) (varSetElems (tyVarsOfType ty2)) @@ -131,7 +131,7 @@ match menv subst (TyVarTy tv1) ty2 | not (typeKind ty2 `isSubKind` tyVarKind tv1) -> Nothing -- Kind mis-match | otherwise - -> Just (extendVarEnv subst tv1 ty2) + -> Just (extendVarEnv subst tv1' ty2) Just ty1' -- There is an existing binding; check whether ty2 matches it | tcEqTypeX (nukeRnEnvL rn_env) ty1' ty2 -- 1.7.10.4