X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fghci%2FDebugger.hs;h=74595893013242b732365fa446d2a5940f9826e7;hb=53c9c9f6d4ba6a533250566d4952c005af56fc74;hp=bcc9b4e2546276244f1f619e604e7c178b887cd3;hpb=de73aab4cab85f9b28afdf00c0174591e7070160;p=ghc-hetmet.git diff --git a/compiler/ghci/Debugger.hs b/compiler/ghci/Debugger.hs index bcc9b4e..7459589 100644 --- a/compiler/ghci/Debugger.hs +++ b/compiler/ghci/Debugger.hs @@ -59,8 +59,7 @@ pprintClosureCommand session bindThings force str = do return () where - -- Do the obtainTerm--bindSuspensions-refineIdType dance - -- Warning! This function got a good deal of side-effects + -- Do the obtainTerm--bindSuspensions-computeSubstitution dance go :: Session -> Id -> IO (Maybe TvSubst) go cms id = do mb_term <- obtainTerm cms force id @@ -76,10 +75,15 @@ pprintClosureCommand session bindThings force str = do -- Then, we extract a substitution, -- mapping the old tyvars to the reconstructed types. let Just reconstructed_type = termType term + -- tcUnifyTys doesn't look through forall's, so we drop them from -- the original type, instead of sigma-typing the reconstructed type - mb_subst = tcUnifyTys (const BindMe) [dropForAlls$ idType id] - [reconstructed_type] + -- In addition, we strip newtypes too, since the reconstructed type might + -- not have recovered them all + mb_subst = tcUnifyTys (const BindMe) + [repType' $ dropForAlls$ idType id] + [repType' $ reconstructed_type] + ASSERT2 (isJust mb_subst, ppr reconstructed_type $$ (ppr$ idType id)) return mb_subst @@ -194,4 +198,4 @@ mk_skol_ty ty | tyvars <- varSetElems (tyVarsOfType ty) , tyvars' <- map (mkTyVarTy . mk_skol_tv) tyvars = substTyWith tyvars tyvars' ty mk_skol_tv tv = mkTcTyVar (tyVarName tv) (tyVarKind tv) - (SkolemTv UnkSkol) + (SkolemTv RuntimeUnkSkol)