将(通过DataKinds)提升到* - >的构造函数一个

时间:2015-06-11 13:15:08

标签: haskell data-kinds

给出像

这样的ADT
data K = A | B Bool

DataKinds扩展程序允许我们将其提升为种类和类型/类型构造函数

K :: BOX
'A :: K
'B :: 'Bool -> K

有没有办法将构造函数添加到提升到类型构造函数的K

'C :: * -> K

2 个答案:

答案 0 :(得分:7)

Conor说,这不是直接可能的。但是,您可以定义

data K a = ... | C a

然后这促进了

C :: a -> K a

如果您使用K *,则可以实现您想要的效果。

答案 1 :(得分:5)

目前,我不敢。我也没有发现明显的解决方法。

This ticket记录了数据类型声明的前景,这些数据类型是天生的,而非数据类型,而且数据类型具有善意性。对于这类事物的构造者来说,按照你的建议打包类型是完全合理的。我们还没有,但它看起来并不是那么有问题。

我的眼睛获得了更大的奖励。我希望*是完全合理的运行时值类型,因此您希望的类型可以通过促销存在,就像我们今天所拥有的那样。将其与pi - 类型的概念相结合(对于类型和值有效共享的语言部分的非参数抽象),我们可能会有更直接的方式来制作ad hoc类型抽象比我们Data.Typeable。通常forall将保持参数化。