Ответ 1
Это, очевидно, вопрос личного стиля. Я думаю, что простой стиль - это инструмент для разъяснения ваших идей, а просмотр (->) a
как Monad
и (->)
как Arrow
- это хорошо, если он служит этой цели.
Я могу думать об одном, а другой нет:
- Не сочиняйте с карриной композицией, она слишком сложна для анализа, например,
(sort .) . (++)
лучше всего написана\xs ys -> sort (xs ++ ys)
. - Используйте любой комбинатор из стандартных модулей
Control.*
, например, напишитеcurry (negate *** (+1))
, используя(->)
какArrow
иap (zipWith (+)) tail
, используя(->) [a]
какMonad
.
Причина привлечения комбинаторов из общих типов управления заключается не только в том, чтобы сделать ваш смысл понятным, но также напоминать вам, что они существуют и часто полезны не только для определения точек, но и для решения проблем.
Как и все вещи, нужно быть осторожным, чтобы не делать этого. Точное определение, включающее слишком много комбинирующих функций, может быстро усложниться.