善良的多态元组

Cli*_*ton 9 haskell

我注意到PolyKinds并且DataKinds以下编译很好:

data Pair a b
data Test = Test
type Test2 = Pair 'Test 'Test
Run Code Online (Sandbox Code Playgroud)

然而:

type Test3 = ('Test, 'Test)
Run Code Online (Sandbox Code Playgroud)

失败,大概(,)是不是多态的,这是有道理的,因为它从它的类型参数中产生值,你不能创建不合适的类型的值*.

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

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

use*_*038 12

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

type Test3 = '( 'Test, 'Test)
Run Code Online (Sandbox Code Playgroud)

这有点好(Test, Test).

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

  • 哦,那就是问题!这确实有道理,'''将被解析为当然的角色. (5认同)
  • @Clinton,这是一个侧面提示:您可能会发现定义`Fst`和`Snd`类型系列非常有用,使用像`x~'(Fst x,Snd x)这样的看似愚蠢的约束很重要`. (4认同)