给出像
这样的ADTdata K = A | B Bool
DataKinds
扩展程序允许我们将其提升为种类和类型/类型构造函数
K :: BOX
'A :: K
'B :: 'Bool -> K
有没有办法将构造函数添加到提升到类型构造函数的K
'C :: * -> K
答案 0 :(得分:7)
Conor说,这不是直接可能的。但是,您可以定义
data K a = ... | C a
然后这促进了
C :: a -> K a
如果您使用K *
,则可以实现您想要的效果。
答案 1 :(得分:5)
目前,我不敢。我也没有发现明显的解决方法。
This ticket记录了数据类型声明的前景,这些数据类型是天生的,而非数据类型,而且数据类型具有善意性。对于这类事物的构造者来说,按照你的建议打包类型是完全合理的。我们还没有,但它看起来并不是那么有问题。
我的眼睛获得了更大的奖励。我希望*是完全合理的运行时值类型,因此您希望的类型可以通过促销存在,就像我们今天所拥有的那样。将其与pi
- 类型的概念相结合(对于类型和值有效共享的语言部分的非参数抽象),我们可能会有更直接的方式来制作ad hoc类型抽象比我们Data.Typeable
。通常forall
将保持参数化。