(<$>) 如何保持关联

How can (<$>) be left associative

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

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

不,<$> 是左关联的,这在您的示例中没有什么不同。 (+1) <$> (/5) <$> [5,10] 读作 ((+1) <$> (/5)) <$> [5,10]。这恰好有效,因为 (->) aFunctor 实例基本上等同于函数组合; fmap (+1) (/5) 等同于 \x -> (x/5)+1,在这种情况下,它给你的结果与你认为这有效的顺序所得到的结果相同,即 (+1) <$> ((+5) <$> [5,10]).

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