Fix #15845 by defining etaExpandFamInstLHS and using it
authorRyan Scott <ryan.gl.scott@gmail.com>
Thu, 8 Nov 2018 15:26:48 +0000 (10:26 -0500)
committerRyan Scott <ryan.gl.scott@gmail.com>
Thu, 8 Nov 2018 15:26:48 +0000 (10:26 -0500)
commit63a817074a8d49798bfd46a6545906fff143e924
treea57848924bb854f5adf33957951cbed076c2bceb
parent932cd41d8c7984c767c1b3b58e05146f69cc5c15
Fix #15845 by defining etaExpandFamInstLHS and using it

Summary:
Both #9692 and #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 #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.

Test Plan: make test TEST="T9692 T15845"

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15845

Differential Revision: https://phabricator.haskell.org/D5294
compiler/typecheck/TcSplice.hs
compiler/types/Coercion.hs
compiler/types/FamInstEnv.hs
compiler/types/TyCon.hs
compiler/types/Type.hs
testsuite/tests/th/T15845.hs [new file with mode: 0644]
testsuite/tests/th/T15845.stderr [new file with mode: 0644]
testsuite/tests/th/T9692.stderr
testsuite/tests/th/all.T