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