Invalid constructor names are accepted in data declarations
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
(^^^^) 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.