实现中需要更改什么才能使左关联运算符变为右关联?

时间:2018-02-10 13:17:29

标签: haskell associative associativity

我正在阅读Haskell,正如预期的那样,有些运算符是左关联的,而其他运算符是正确的关联运算符。这让我想到,在比较左关联版本和右关联版本时,新实例¤的实现会有何不同?

所以给定[1,2] ¤ [3,4] ¤ [5,6],如果我希望将其解释为(([1,2] ¤ [3,4]) ¤ [5,6])([1,2] ¤ ([3,4] ¤ [5,6])),那么实施会发生什么变化?

1 个答案:

答案 0 :(得分:2)

要声明操作符是左关联或右关联,可以使用fixity declaration

例如

infixl 5 .+.                  -- left associative
infixr 5 .-.                  -- right associative
infix  5 .=.                  -- not associative

最后一个导致x .=. y .=. z成为解析错误,需要明确的括号。

上面的数字5是优先级,应该根据其他运算符的级别选择(例如(+)是级别6,而($)级别为0)。