Invalid constructor names are accepted in data declarations
|Reported by:||dolio||Owned by:|
|Type of failure:||None/Unknown||Test Case:|
|Related Tickets:||Differential Revisions:|
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.