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 |