29

f x y = x * y. 我们可以通过两种方式应用这个函数:f 5 6,或者,使用中缀符号,5 `f` 6。运算符规则是否适用于最后一个表达式?这个申请有什么优先权?它只是另一种形式的函数应用,所以它也会有最高优先级吗?

我想编译器看到这种特殊形式(由于``和/或以字母(?)开头的名称),实际上将其视为普通函数应用程序,而不是将其视为运算符。

4

2 回答 2

27

Haskell 98 报告中有一个关于Operator Applications的部分进行了清理:

运算符要么是运算符符号,例如 + 或 $$,要么是包含在重音符号(反引号)中的普通标识符,例如 `op`。例如,可以不写前缀 application op xy,而是写中缀 application x `op` y。如果没有为 `op` 给出固定性声明,那么它默认为最高优先级和左关联性(参见第 4.4.2 节)。

如其他答案所示,报告还有一个关于固定性声明的部分,允许您定义自己的固定性,例如:

infixl 7 `op`
于 2011-11-15T16:01:28.603 回答
12

如果没有给出明确的固定性声明,例如

infixl 7 `quot`

带反引号的中缀函数的默认固定性为infixl 9,因此将被视为具有相同固定性的任何其他中缀运算符。

于 2011-11-15T15:51:35.460 回答