haskell - Haskell 中缀数据类型构造函数的语法规则

标签 haskell types constructor infix-notation

我试图让 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/

相关文章:

haskell - 获取列表中间元素的最有效方法是什么?

haskell - 这个功能可以吗?

c - C 中的指针数组及更多内容

c++ - 使用 init-methods 来避免使用 new 分配对象——这是糟糕的设计吗?

Java 7 构造函数

c# - 从构造函数调用时静态函数意外返回

haskell - 无法将预期类型与实际类型匹配

haskell - 为什么 sum x y 在 Haskell 中属于 (Num a) => a -> a -> a 类型?

types - 传递 Fantom 类型文字

javascript - 新的 JavaScript "Symbol"数据类型有哪些可能的使用场景?