Sort out promotion of unlifted types
Here's an unlifted type:
type T :: UnliftedType
data T = A | B Int
If I try to promote A:
type PA = 'A
I get an error: Couldn't match a lifted type with an unlifted type. I can fix this by adding a kind signature:
type PA :: T
type PA = 'A
If I try to promote B:
type PB = 'B
This works without a kind signature. If I add a kind signature with the kind that was inferred by GHC:
type PB :: Int -> T
type PB = 'B
then GHC rejects: Expected a lifted type, but ‘T’ is a boxed unlifted type.
I propose that for now we forbid:
- Promotion of constructors of unlifted datatypes and newtypes
- Promotion of unboxed tuples
type T1 = '(# #),type T2 = '(#,#) - Unlifted
type datadeclarations
type T :: UnliftedType
type data T = MkT
until there's motivation/theory behind it.
The other option is to at least be consistent and treat PA and PB in the same way.