我试图使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的重要组成部分我失踪了。
答案 0 :(得分:9)
任何以冒号:
开头的运算符都是类型构造函数或数据构造函数,但(->)
除外。如果你想要代字号,你可以使用:~>
,但是你不会放弃使用不以冒号开头的东西。 Source