Ответ 1
Ваш оператор (%)
является именно оператором (<&>)
из пакета объектива.
Я нашел определение
(%) = flip fmap
Я могу написать код следующим образом:
readFile "/etc/passwd" % lines % filter (not . null)
для меня это имеет смысл, тогда альтернатива
filter (not . null) <$> lines <$> readFile "/etc/passwd"
Очевидно, что это просто вопрос порядка, делает ли кто-нибудь еще это? есть ли веская причина не писать такой код?
Ваш оператор (%)
является именно оператором (<&>)
из пакета объектива.
Аналогичная функция для Applicative
typeclass называется <**>
; это совершенно разумная вещь, которую нужно хотеть или использовать для Functor. К сожалению, семантика немного отличается от <**>
, поэтому она не может быть напрямую расширена для применения к Functor
.
-- (.) is to (<$>) as flip (.) is to your (%).
Я обычно определяю (&) = flip (.), и это точно так же, как и ваш пример, вы можете применять функции backwords. Позволяет проще понять код без очков, на мой взгляд.
Лично я бы не использовал такие операторы, потому что тогда мне нужно изучить два порядка чтения программ.