Partially applied type family allowed but unusable
I was playing around with the following code, which tries to map a type family over a type (something I thought would not be allowed):
{-# LANGUAGE
TypeFamilies
, KindSignatures
#-}
type family Id x :: *
type instance Id a = a
type family Map (f :: * -> *) x :: *
type instance Map f [a] = [f a]
x :: Map Id [Bool]
x = []
Both GHC 7.8.3 and the current HEAD (7.9.20140811) accept this program! However, changing the definition of x to [True] gives an error:
Couldn't match type ‘Id Bool’ with ‘Bool’
Expected type: Map Id [Bool]
Actual type: [Bool]
In the expression: [True]
In an equation for ‘x’: x = [True]
If I define y :: Id Bool with value True (which works fine) and define x = [y], I even get this error:
Couldn't match type ‘Bool’ with ‘Id Bool’
Expected type: Id Bool
Actual type: Id Bool
In the expression: y
In the expression: [y]
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.9 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |