С DataKinds определение типа
data KFoo = TFoo
вводит вид KFoo :: BOX
и тип TFoo :: KFoo
. Почему я не могу затем определить
data TFoo = CFoo
такое, что CFoo :: TFoo
, TFoo :: KFoo
, KFoo :: BOX
?
Должны ли все конструкторы принадлежать типу, принадлежащему виду *
? Если да, то почему?
Изменить. Я не получаю сообщение об ошибке, когда я это делаю, потому что конструкторы и типы совместно используют пространство имен, но GHC разрешает конфликты, поскольку он неоднозначно вызывает имена как обычные типы, а не рекламируемые конструкторы. Документы говорят, чтобы префикс с '
ссылался на продвигаемый конструктор. Когда я меняю эту вторую строку на
data 'TFoo = CFoo
Я получаю сообщение об ошибке
Неверный тип объявления типа или класса: TFoo