Как (<$>) можно оставить ассоциативным

Я просто заметил, что (<$>) имеет фиксированность 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],

Другие вопросы по тегам