Haskell (<;$>;)如何保持关联性
我刚刚注意到Haskell (<;$>;)如何保持关联性,haskell,associativity,Haskell,Associativity,我刚刚注意到()具有infixl4的固定性。这怎么可能 (+1)(/5)[5,10]显然是从右向左运行的。否,是左关联的,在您的示例中没有什么不同(+1)(/5)[5,10]读作(+1)(/5))[5,10]。这是因为(>)a的函子实例基本上等同于函数合成fmap(+1)(/5)相当于\x->(x/5)+1,在本例中,它给出的结果与您似乎认为它有效的顺序相同,即(+1)(+5)[5,10]) 因为这有点让人困惑,如果您想在一行中应用多个函数,那么在这里使用普通函数组合运算符可能更易于阅读:(+1
()
具有infixl4
的固定性。这怎么可能
(+1)(/5)[5,10]
显然是从右向左运行的。否,
是左关联的,在您的示例中没有什么不同<代码>(+1)(/5)[5,10]读作(+1)(/5))[5,10]
。这是因为(>)a的函子
实例
基本上等同于函数合成fmap(+1)(/5)
相当于\x->(x/5)+1
,在本例中,它给出的结果与您似乎认为它有效的顺序相同,即(+1)(+5)[5,10])
因为这有点让人困惑,如果您想在一行中应用多个函数,那么在这里使用普通函数组合运算符可能更易于阅读:
(+1)。(/5)[5,10]
因此,就语义而言,它是左关联还是右关联并不重要(而且函子确实满足函子定律)。我想知道左派的交往是否是一种故意的选择,例如出于绩效原因。理论上,它甚至可能是偶然或错误地以这种方式定义的。@chi如果()
是正确关联的,那么你就不能再使用fxy
样式模式(因为()
也必须是正确关联的,这样你才能在没有括号的情况下一起使用它们)。有人说,($)
应该是左联想的,因为这样你就可以做一些类似于f$gx$hy
的事情,这就相当于f(gx)(hy)
(我想这与->
的右联想是对称的)。当然,这实际上取决于偏好。