Invalid constructor names are accepted in data declarations
|Reported by:||dolio||Owned by:|
|Type of failure:||None/Unknown||Difficulty:||Unknown|
|Test Case:||Blocked By:|
Earlier today, someone was asking on #haskell why the constructor name (^) wouldn't work in GADT definitions. My response was that (^) isn't a constructor name, but much to my surprise, GHC accepts such names in a regular data declaration:
data Foo = F | (^^^^) Int Int
This creates a Foo type and value constructor F, but no value constructor (^^^^). However, in 7.6.3, if DataKinds? are enabled, both constructors appear at the type level.
In HEAD, the same definition is accepted, with only F existing at the value level, as before. But at the type level, both F and (^^^^) just generate errors that Foo is not a promotable type. At that point, I think there's no question that the declaration should just be ruled out.