Любой когда-либо зеркально отражает (<$>)

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

(%)  = flip fmap

Я могу написать код как это:

readFile "/etc/passwd" % lines % filter (not . null)

Мне это имеет больше смысла, чем альтернатива:

filter (not . null) <$> lines <$> readFile "/etc/passwd"

Очевидно, это - просто вопрос порядка.

Кто-либо еще делает это? Существует ли допустимая причина не написать код как это?

28
задан Matthias Braun 31 July 2019 в 10:55
поделиться

4 ответа

Ваш оператор (%) является точно оператором (<&>) из пакета объективов .

Может быть импортировано с:

import Control.Lens.Operators ((<&>))
10
ответ дан 2 revs, 2 users 75% 28 November 2019 в 03:51
поделиться
-- (.) is to (<$>) as flip (.) is to your (%).  

Я обычно определяю (&) = flip (.), И, как и в вашем примере, вы можете применять обратные слова композиции функций. На мой взгляд, это упрощает понимание кода без баллов.

5
ответ дан 28 November 2019 в 03:51
поделиться

Существует аналогичная функция для класса типа Applicative , называемая <**> ; это вполне разумная вещь, которую можно захотеть или использовать и для Functor. К сожалению, семантика немного отличается для <**> , поэтому его нельзя напрямую расширить для применения к Functor .

6
ответ дан 28 November 2019 в 03:51
поделиться

Personally I wouldn't use such an operators because then I have to learn two orders in which to read programs.

3
ответ дан 28 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: