中缀函数的优先级表现异常奇怪

3

我正在使用 bool :: a -> a -> Bool -> a 函数。 我想使用中缀版本,因为我认为它更易读,但我注意到:

(-1) `bool` 1 True

是一个错误。

(-1) `bool` 1 $ True

工作。即使如此

(-1) `bool` 1 (True)

以前我认为两种方式是等价的,即使用$和在此位置到结尾处用括号包裹起来。但事实证明只有一种方式可行。

为什么这会有区别呢?因为第一种方式只执行了一个操作。

1个回答

5
中缀运算符的优先级较低,应用程序绑定紧密。
(-1) `bool` 1 True
-- means
(-1) `bool` (1 True)


(-1) `bool` 1 $ True
-- means
((-1) `bool` 1) $ True


(-1) `bool` 1 (True)
-- means
(-1) `bool` (1 (True))

您可能需要:

((-1) `bool` 1) True

我从中得出结论,具有超过2个参数的中缀运算符总是需要特别注意吗? - hgiesel
吹毛求疵:我认为你的意思是“推断”。 - Julian Leviston
1
@hgiesel 我相信具有超过两个参数的函数通常只适用于前缀表示法。 - chi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接