Как (<$>) можно оставить ассоциативным
Я просто заметил, что (<$>)
имеет фиксированность infixl 4
, Как это может быть?
(+1) <$> (/5) <$> [5,10]
очевидно работает справа налево.
1 ответ
Нет, <$>
остается ассоциативным, и это не отличается в вашем примере. (+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]
,