如何(<$>)保持关联

hgi*_*sel 16 haskell associativity

我只是注意到它(<$>)的固定性infixl 4.怎么会这样?

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

Cub*_*bic 18

不,<$>是左关联的,这在你的例子中没有什么不同.(+1) <$> (/5) <$> [5,10]被读为((+1) <$> (/5)) <$> [5,10].这恰好是因为Functor实例(->) a基本上等同于函数组合; fmap (+1) (/5)相当于\x -> (x/5)+1,在这种情况下,你得到的结果与你认为可以使用的顺序相同,即(+1) <$> ((+5) <$> [5,10]).

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

  • @chi如果`(<$>)`是正确的关联,你就不能再使用`f <$> x <*> y`样式模式(因为`(<*>)`也必须是正确的关联,让你一起使用它们而没有像这样的括号).有些人说`($)`本应该是联想的,因为那时你可以做一些像`f $ gx $ hy`这样的东西,它等同于`f(gx)(hy)`(和我猜猜它与` - >`是正确关联的方式是对称的.当然,它真的归结为偏好. (2认同)