Кто-нибудь переворачивает (<$>)
Я нашел определение следующего
(%) = flip fmap
Я могу написать код, подобный следующему:
readFile "/etc/passwd" % lines % filter (not . null)
для меня это имеет больше смысла, чем альтернатива
filter (not . null) <$> lines <$> readFile "/etc/passwd"
Очевидно, это просто вопрос порядка, кто-нибудь еще делает это? Есть ли веская причина не писать такой код?
4 ответа
(<&>) :: Functor f => f a -> (a -> b) -> f b
Теперь доступно от Data.Functor
в base
.
https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Functor.html
Ваш оператор (%)
именно оператор (<&>)
из пакета линз.
Это может быть импортировано с:
import Control.Lens.Operators ((<&>))
Существует аналогичная функция для Applicative
класс типов называется <**>
; это совершенно разумная вещь, которую нужно или использовать для Functor. К сожалению, семантика немного отличается для <**>
поэтому его нельзя расширить непосредственно для применения к Functor
также.
-- (.) is to (<$>) as flip (.) is to your (%).
Я обычно определяю (&) = flip (.), И, как и в вашем примере, вы можете применять обратные слова для композиции функций. Позволяет легче понять бессмысленный код на мой взгляд.
Лично я бы не использовал такие операторы, потому что тогда мне нужно выучить два порядка чтения программ.