善良的多态元组

时间:2017-08-29 06:07:11

标签: haskell

我注意到PolyKindsDataKinds以下编译正常:

data Pair a b
data Test = Test
type Test2 = Pair 'Test 'Test

然而:

type Test3 = ('Test, 'Test)

失败,大概是因为(,)不是多态的,这是有意义的,因为它从它的类型参数中创建值,而你不能创建不属于*的类型的值。 / p>

是否有一个具有类型多态元组的库(为了节省我重新发明轮子)?

我确实意识到,与真正的元组不同,类型多态元组只存在于类型级别,但这就是我需要的所有目的。

1 个答案:

答案 0 :(得分:12)

如果您已经在使用DataKinds,则应该使用内置元组构造函数的升级版本,而不是类型构造函数:

type Test3 = '( 'Test, 'Test)

这有点(Test, Test)

请注意('之间必须有空格; '('Test, 'Test)是语法错误(解析器中必要的边缘情况)。