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