【问题标题】:Type-level list of a single type level-tuple in HaskellHaskell 中单个类型级别元组的类型级别列表
【发布时间】:2023-03-18 20:21:02
【问题描述】:

使用 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) :: (*,*))] :: [(*, *)]

有没有更简洁的方法来做到这一点,或者这是最好的方法?

【问题讨论】:

    标签: haskell data-kinds


    【解决方案1】:

    需要加空格:

    > :k '['(Int, Int), '(Int, Int)]
    <interactive>:1:1: error: parse error on input '
    > :k '[ '(Int, Int), '(Int, Int)]
    '[ '(Int, Int), '(Int, Int)] :: [(*, *)]
    

    本质上,解析器被 char 文字 '[' 弄糊涂了,它恰好在开头。

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多