TypeInType error message regressions
TypeInType causes error messages around certain kind errors to degrade.
Here is the case:
[W] (alpha :: k) ~ (Int :: *)
where alpha is a unification variable, k is a skolem, and there is no witness that k ~ *. The solver will simplify to
[W] kco :: k ~ *
[W] (alpha :: k) ~ (Int |> sym kco)
and then the latter, now homogeneous equality is solved by unification
alpha := Int |> sym kco
This is all sound. But when reporting a kind error around k not equalling *, GHC likes to report the type error that the kind error came from. But, after zonking, the type error looks like Int ~ Int, when we drop coercions (as we tend to do in error messages).
That's unfortunate. It affects test cases
- T9196
- T8262
- T8603
- tcfail122
Simon has proposed a rule that should avoid this: never, ever use a wanted as a kind cast. That might work, but an attempt at implementing caused a loop when kind families were involved. I will keep pushing on this.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.11 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | high |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |