(<$>) 如何保持关联
How can (<$>) be left associative
我刚刚注意到 (<$>)
的固定值为 infixl 4
。怎么会这样?
(+1) <$> (/5) <$> [5,10]
显然从右到左有效。
不,<$>
是左关联的,这在您的示例中没有什么不同。 (+1) <$> (/5) <$> [5,10]
读作 ((+1) <$> (/5)) <$> [5,10]
。这恰好有效,因为 (->) a
的 Functor
实例基本上等同于函数组合; fmap (+1) (/5)
等同于 \x -> (x/5)+1
,在这种情况下,它给你的结果与你认为这有效的顺序所得到的结果相同,即 (+1) <$> ((+5) <$> [5,10])
.
因为这有点令人困惑,如果你想连续应用多个函数,为了可读性可能更好地使用这里的普通函数组合运算符:(+1) . (/5) <$> [5,10]
.
我刚刚注意到 (<$>)
的固定值为 infixl 4
。怎么会这样?
(+1) <$> (/5) <$> [5,10]
显然从右到左有效。
不,<$>
是左关联的,这在您的示例中没有什么不同。 (+1) <$> (/5) <$> [5,10]
读作 ((+1) <$> (/5)) <$> [5,10]
。这恰好有效,因为 (->) a
的 Functor
实例基本上等同于函数组合; fmap (+1) (/5)
等同于 \x -> (x/5)+1
,在这种情况下,它给你的结果与你认为这有效的顺序所得到的结果相同,即 (+1) <$> ((+5) <$> [5,10])
.
因为这有点令人困惑,如果你想连续应用多个函数,为了可读性可能更好地使用这里的普通函数组合运算符:(+1) . (/5) <$> [5,10]
.