Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell (<;$>;)如何保持关联性_Haskell_Associativity - Fatal编程技术网

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)
(我想这与
->
的右联想是对称的)。当然,这实际上取决于偏好。