我试图让 Haskell 数据类型有点像 python 字典、ruby 哈希或 javascript 对象,其中字符串链接到值,如下所示:
data Entry t = Entry String t
type Dictionary t = [Entry t]
上面的代码工作正常。但是,我想要一个稍微好一点的构造函数,所以我尝试像这样定义它:
data Entry t = String ~> t
这失败了。我试过这个:
data Entry t = [Char] ~> t
再次失败。我知道 ~
在 Haskell 中具有特殊含义,并且 GHCi 仍然允许运算符 ~>
,但我仍然尝试了另一种方式:
data Entry t = [Char] & t
由于解析错误而再次失败。我觉得这很令人困惑,因为出于某种无法解释的原因,这有效:
data Entry t = String :> t
这是否意味着中缀类型构造函数中可能出现的字符有一定的规则,或者是一种误解。我不是 Haskell 的新手,我知道使用第一个构造函数会更惯用,但是这个构造函数难倒了我,而且它似乎是我所缺少的 Haskell 的重要部分。
最佳答案
任何以冒号开头的运算符 :
都是类型构造函数或数据构造函数,(->)
除外。如果您想要波形符,可以使用 :~>
,但您无法使用不以冒号开头的内容。 Source
关于haskell - Haskell 中缀数据类型构造函数的语法规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27000018/