- mb_subst = tcUnifyTys (const BindMe) [idType id] [reconstructed_type]
- ASSERT (isJust mb_subst) return mb_subst
+
+ -- tcUnifyTys doesn't look through forall's, so we drop them from
+ -- the original type, instead of sigma-typing the 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