如何(< $>)保持关联

时间:2017-04-15 14:41:22

标签: haskell associativity

我刚注意到(<$>)的固定性为infixl 4。怎么会这样?

(+1) <$> (/5) <$> [5,10]显然从左到右。

1 个答案:

答案 0 :(得分:18)

不,<$>是关联的,这在您的示例中没有任何不同。 (+1) <$> (/5) <$> [5,10]被视为((+1) <$> (/5)) <$> [5,10]。这恰好起作用,因为Functor (->) a实例基本上等同于函数组合; fmap (+1) (/5)相当于\x -> (x/5)+1,在这种情况下,您会得到与您认为可以使用的订单相同的结果,即(+1) <$> ((+5) <$> [5,10])。< / p>

因为这有点令人困惑,如果你想连续应用多个函数,那么在这里使用普通函数组合运算符的可读性可能更好:(+1) . (/5) <$> [5,10]