【发布时间】:2019-08-03 02:18:08
【问题描述】:
我对箭头及其在数据构造函数中的实际含义感到困惑。我很惊讶它甚至编译但我不知道如何使用它。
如果我尝试将它用作数据构造函数的名称,它不会解析,而且我不确定如何解释它。如果我将其解释为函数类型,则数据构造函数没有名称,这对我来说也没有意义。
data Type
= TBool
| TInt
| Arrow Type Type
| (->) Type Type
test :: Type
test = Arrow TBool TInt -- Ok
test' :: Type
test' = (->) TBool TInt -- Parse Error on input '->'
【问题讨论】:
-
是否有任何语言扩展在使用?
-
这真的很奇怪。我可以确认
data声明已解析,但尝试使用(->)失败,没有启用任何扩展。我怀疑解析算法在data声明中的规则与在表达式中的规则不同,但不能明确地说出什么。 -
这在我看来像是一个 GHC 错误。
-
相当肯定
data Type = (->) Type Type不应该解析。中缀构造函数通常必须以:开头,即data Type = (:->) Type Type是最接近的合法近似值。 -
我已将其提交为issue #16999。
标签: haskell