X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fghci%2FDebugger.hs;h=31747851a381691e7a5a62eb3cf280c90b24cf0f;hp=bcc9b4e2546276244f1f619e604e7c178b887cd3;hb=3432f617a78f4a0bed641947179b00f1070a9018;hpb=f3e5a3add2e8b5f878be96d7b04ef52e3c39a211 diff --git a/compiler/ghci/Debugger.hs b/compiler/ghci/Debugger.hs index bcc9b4e..3174785 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