我正在阅读Haskell,正如预期的那样,有些运算符是左关联的,而其他运算符是正确的关联运算符。这让我想到,在比较左关联版本和右关联版本时,新实例¤的实现会有何不同?
所以给定[1,2] ¤ [3,4] ¤ [5,6]
,如果我希望将其解释为(([1,2] ¤ [3,4]) ¤ [5,6])
与([1,2] ¤ ([3,4] ¤ [5,6]))
,那么实施会发生什么变化?
答案 0 :(得分:2)
要声明操作符是左关联或右关联,可以使用fixity declaration。
例如
infixl 5 .+. -- left associative
infixr 5 .-. -- right associative
infix 5 .=. -- not associative
最后一个导致x .=. y .=. z
成为解析错误,需要明确的括号。
上面的数字5
是优先级,应该根据其他运算符的级别选择(例如(+)
是级别6,而($)
级别为0)。