Кто-нибудь переворачивает (<$>)

Я нашел определение следующего

(%)  = 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 (.), И, как и в вашем примере, вы можете применять обратные слова для композиции функций. Позволяет легче понять бессмысленный код на мой взгляд.

Лично я бы не использовал такие операторы, потому что тогда мне нужно выучить два порядка чтения программ.

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