Enabling PolyKinds makes some type errors weird
Consider this program:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
module Existential where
data Any (f :: k -> *)
data X a
data Y (a :: *)
data Z (a :: Bool)
x :: Any X -> ()
x 'c' = ()
y :: Any Y -> ()
y 'c' = ()
z :: Any Z -> ()
z 'c' = ()
x, y and z are all ill-typed, but the shapes of the type errors are different in each case. They are respectively:
Couldn't match expected type `Any k (X k)' with actual type `Char'
Couldn't match expected type `Any * Y' with actual type `Char'
Couldn't match expected type `Any Bool Z' with actual type `Char'
Aren't they supposed to say just 'Any X', 'Any Y' and 'Any Z'?
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |