Haskell中缀函数应用程序优先级

时间:2011-11-15 15:48:26

标签: function haskell operators operator-precedence infix-notation

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

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

2 个答案:

答案 0 :(得分:23)

Haskell 98 Report有一个关于Operator Applications的部分可以清除它:

  

运算符是运算符符号,例如+或$$,或者是运算符   普通标识符包含在严重重音符号(反引号)中,例如   `op`。例如,不是编写前缀应用程序op x y,   可以编写中缀应用程序x`op`y。如果没有固定声明   给出'op`然后它默认为最高优先级并且离开   相关性(参见第4.4.2节)。

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

infixl 7 `op`

答案 1 :(得分:9)

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

infixl 7 `quot`

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