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 |