Fix a typo in TcValidity.checkFamInstRhs
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 22 Aug 2018 09:00:20 +0000 (10:00 +0100)
committerBen Gamari <ben@smart-cactus.org>
Thu, 23 Aug 2018 22:39:34 +0000 (18:39 -0400)
commit047c17a42f97fbd5df972b2c322b0ad0c6f9fdcd
treee66fef90b53667dde15d1214dbea0c00a302035e
parentd3ce8842226877d753f55f2ab5fdf2b815d7300f
Fix a typo in TcValidity.checkFamInstRhs

In error message generation we were using the wrong
type constructor in inst_head.  Result: the type became
ill-kinded, and that sent the compiler into a loop.

A separate patch fixes the loop. This patch fixes the
actual bug -- Trac #15473.

I also improved the "occurs more often" error message
a bit.  But it's still pretty terrible:

    * Variable ‘a’ occurs more often
      in the type family application ‘Undefined’
      than in the instance head ‘LetInterleave xs t ts is y z’

It looks like nonsense, but all becomes clear if you use
-fprint-explicit-kinds.  Really we should fix this by spotting
when invisible arguments are involved and at least suggesting
-fprint-explicit-kinds.

(cherry picked from commit 8c7f90abcc1e8f9f29b751f23174e8db89ba6983)
compiler/typecheck/TcValidity.hs
testsuite/tests/typecheck/should_compile/T15473.stderr [new file with mode: 0644]
testsuite/tests/typecheck/should_compile/all.T