使用 DataKinds,可以如下定义:
data KFoo = TFoo
介绍了类型 TFoo :: KFoo
和类别 KFoo :: BOX
。那么我为什么不能接着定义
data TFoo = CFoo
如何满足CFoo :: TFoo
,TFoo :: KFoo
,KFoo :: BOX
?
所有构造函数是否需要属于属于类型*
的种类?如果是这样的话,为什么?
编辑:我这样做时不会出现错误,因为构造函数和类型共享命名空间,但GHC允许冲突,因为它将名称作为常规类型进行消歧义,而不是晋升的构造函数。文档建议使用'
前缀来引用晋升的构造函数。当我将第二行更改为
data 'TFoo = CFoo
我遇到了以下错误:
类型或类声明的头部格式不正确:TFoo
data TFoo
时,会出现什么错误? - cdk