Haskell 中一个类型级元组的类型级列表

6
使用DataKinds和TypeOperators,我可以创建类型级别的类型元组和类型级别的类型列表,但我无法嵌套它们:
> :k '['(Int, Int), '(Int, Int)]
error: parse error on input ‘'’`

我可以创建包含多个元组的列表:
> :k ['(Int,Int),'(Int,Int)]
['(Int,Int),'(Int,Int)] :: [(*, *)]

但是仅有一个元组时,这种方法无法奏效:
:k ['(Int,Bool)]
<interactive>:1:2: error:
    • Expected a type, but ‘'(Int, Bool)’ has kind ‘(*, *)’

可以使用Kind签名来实现,但这样会非常冗长:
> :k '[('(Int,Bool) :: (*,*))]
'[('(Int,Bool) :: (*,*))] :: [(*, *)]

有没有更简洁的方法来完成这个操作,还是这个方法已经是最好的了?

1个回答

6
你需要添加一个空格:
> :k '['(Int, Int), '(Int, Int)]
<interactive>:1:1: error: parse error on input '
> :k '[ '(Int, Int), '(Int, Int)]
'[ '(Int, Int), '(Int, Int)] :: [(*, *)]

实际上,解析器对于在开头的字符文字'['感到困惑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接