Apply the interim fix for #14119 to liftCoMatch
authorRichard Eisenberg <rae@cs.brynmawr.edu>
Sat, 24 Feb 2018 16:49:15 +0000 (11:49 -0500)
committerRichard Eisenberg <rae@cs.brynmawr.edu>
Sun, 1 Apr 2018 03:17:01 +0000 (23:17 -0400)
Matching in the presence of casts can happen in liftCoMatch, too.

compiler/types/Unify.hs

index 34f2fac..cb651ee 100644 (file)
@@ -1328,7 +1328,13 @@ ty_co_match menv subst ty co lkco rkco
 
 ty_co_match menv subst ty co lkco rkco
   | CastTy ty' co' <- ty
-  = ty_co_match menv subst ty' co (co' `mkTransCo` lkco) (co' `mkTransCo` rkco)
+     -- See Note [Matching in the presence of casts]
+  = let empty_subst  = mkEmptyTCvSubst (rnInScopeSet (me_env menv))
+        substed_co_l = substCo (liftEnvSubstLeft empty_subst subst)  co'
+        substed_co_r = substCo (liftEnvSubstRight empty_subst subst) co'
+    in
+    ty_co_match menv subst ty' co (substed_co_l `mkTransCo` lkco)
+                                  (substed_co_r `mkTransCo` rkco)
 
   | CoherenceCo co1 co2 <- co
   = ty_co_match menv subst ty co1 (lkco `mkTransCo` mkSymCo co2) rkco