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