X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcUnify.lhs;h=d1ea6c0886887350fa8b1114846281999c2bcda5;hb=bd8a952b1ec55c1c8fe6db968f8f0cc08596a550;hp=e038888950569c980a1a55a3fb5e07c8ad1ff13e;hpb=39b262dbbf5163ed0bdd32f7c947133278c899bc;p=ghc-hetmet.git diff --git a/compiler/typecheck/TcUnify.lhs b/compiler/typecheck/TcUnify.lhs index e038888..d1ea6c0 100644 --- a/compiler/typecheck/TcUnify.lhs +++ b/compiler/typecheck/TcUnify.lhs @@ -1174,8 +1174,7 @@ u_tys outer nb1 orig_ty1 ty1 nb2 orig_ty2 ty2 ; addErrCtxtM (unifyForAllCtxt tvs phi1 phi2) $ do { unless (equalLength theta1 theta2) (bale_out outer) - ; _cois <- uPreds outer nb1 theta1 nb2 theta2 -- TOMDO: do something with these pred_cois - ; traceTc (text "TOMDO!") + ; cois <- uPreds outer nb1 theta1 nb2 theta2 ; coi <- uTys nb1 tau1 nb2 tau2 -- Check for escape; e.g. (forall a. a->b) ~ (forall a. a->a) @@ -1190,7 +1189,13 @@ u_tys outer nb1 orig_ty1 ty1 nb2 orig_ty2 ty2 -- This check comes last, because the error message is -- extremely unhelpful. ; when (nb1 && nb2) (notMonoType ty1) - ; return coi + ; let mk_fun (pred, coi_pred) (ty, coi) + = (mkFunTy pred_ty ty, mkFunTyCoI pred_ty coi_pred ty coi) + where + pred_ty = mkPredTy pred + ; return (foldr mkForAllTyCoI + (snd (foldr mk_fun (tau1,coi) (theta1 `zip` cois))) + tvs) }} where (tvs1, body1) = tcSplitForAllTys ty1