Note [Efficiency for ForAllCo case of mapTyCoX]
As noted in Note [ForAllCo] in GHC.Core.TyCo.Rep, a ForAllCo is a bit redundant. It stores a TyCoVar and a Coercion, where the kind of the TyCoVar always matches the left-hand kind of the coercion. This is convenient lots of the time, but not when mapping a function over a coercion. The problem is that tcm_tybinder will affect the TyCoVar's kind and mapCoercion will affect the Coercion, and we hope that the results will be the same. Even if they are the same (which should generally happen with correct algorithms), then there is an efficiency issue. In particular, this problem seems to make what should be a linear algorithm into a potentially exponential one. But it's only going to be bad in the case where there's lots of foralls in the kinds of other foralls. Like this: forall a : (forall b : (forall c : ...). ...). ... This construction seems unlikely. So we'll do the inefficient, easy way for now.
References 1
- ForAllCo GHC.Core.TyCo.Rep
Referenced by 1
- GHC.Core.Type call site