Skip to content

Bogus type in typechecker error recovery

If the typechecker sees

let f = <rhs> in <body>

and there's a type error in <rhs>, GHC recovers from the error, binds f to "a type that should cause no more trouble", and continues with <both> in the hope of finding more type errors.

What is "a type that should cause no more trouble"? Well forall a.a seems like a good candidate.

But, in this commit

commit 6746549772c5cc0ac66c0fce562f297f4d4b80a2
Author: Richard Eisenberg <eir@cis.upenn.edu>
Date:   Fri Dec 11 18:19:53 2015 -0500

    Add kind equalities to GHC.

we made the type look like this: forall r. forall (a :: TYPE r). a

Alas! That type is ill-formed because the kind TYPE r escapes the scope of f.

I discovered this when beefing up typeKind in pursuit of #14939 (closed)

Trac metadata
Trac field Value
Version 8.4.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information