Commit 3432f617 authored by mnislaih's avatar mnislaih
Browse files

Drop newtypes before computing the refinement substitution after :print type reconstruction

parent f3e5a3ad
......@@ -59,8 +59,7 @@ pprintClosureCommand session bindThings force str = do
return ()
-- 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]
-- 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
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment