Both Trac #9692 and Trac #14179 were caused by GHC being careless
about using eta-reduced data family instance axioms. Each of those
tickets were fixed by manually whipping up some code to eta-expand
the axioms. The same sort of issue has now caused Trac #15845, so I
figured it was high time to factor out the code that each of these
fixes have in common.
This patch introduces the etaExpandFamInstLHS function, which takes
a family instance's type variables, LHS types, and RHS type, and
returns type variables and LHS types that have been eta-expanded if
necessary, in the case of a data family instance. (If it's a type
family instance, etaExpandFamInstLHS just returns the supplied type
variables and LHS types unchanged).
Along the way, I noticed that many references to
Note [Eta reduction for data families] (in FamInstEnv) had
slightly bitrotted (they either referred to a somewhat different
name, or claimed that the Note lived in a different module), so
I took the liberty of cleaning those up.