Haskell 中单个类型级别元组的类型级别列表
Type-level list of a single type level-tuple in Haskell
使用 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 ‘(*, *)’
可以使用 KindSignatures 来完成,但它非常冗长:
> :k '[('(Int,Bool) :: (*,*))]
'[('(Int,Bool) :: (*,*))] :: [(*, *)]
是否有更简洁的方法,或者这是最好的方法?
您需要添加一个space:
> :k '['(Int, Int), '(Int, Int)]
<interactive>:1:1: error: parse error on input '
> :k '[ '(Int, Int), '(Int, Int)]
'[ '(Int, Int), '(Int, Int)] :: [(*, *)]
本质上,解析器被恰好在开头的 char 文字 '['
搞糊涂了。
使用 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 ‘(*, *)’
可以使用 KindSignatures 来完成,但它非常冗长:
> :k '[('(Int,Bool) :: (*,*))]
'[('(Int,Bool) :: (*,*))] :: [(*, *)]
是否有更简洁的方法,或者这是最好的方法?
您需要添加一个space:
> :k '['(Int, Int), '(Int, Int)]
<interactive>:1:1: error: parse error on input '
> :k '[ '(Int, Int), '(Int, Int)]
'[ '(Int, Int), '(Int, Int)] :: [(*, *)]
本质上,解析器被恰好在开头的 char 文字 '['
搞糊涂了。