Когда использовать бессмысленный стиль?


Многие программисты haskell, включая меня, любят бессмысленный стиль, особенно при написании сложных синтаксических анализаторов. Они делают код более читаемым и менее многословным. Но иногда все происходит наоборот (например, при злоупотреблении экземплярами Monad и друзьями для (->) a).

Пожалуйста, дайте мне некоторые основные рекомендации, когда вы считаете, что бессмысленный стиль полезен, а когда нет. Например, я всегда использую лямбду, если мне нужно использовать частичную композицию (что-то вроде flip ((.) . take) . drop).
2 14

2 ответа:

Это, очевидно, вопрос личного стиля. Я думаю, что стиль без точек-это инструмент для прояснения ваших идей, и просмотр (->) a как Monad и (->) как Arrow - Хорошая вещь, если она служит этой цели.

Я могу думать о том, что один делает, а другой нет:

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

Если сомневаетесь, просто составьте функции с (.). Не вступайте в сальто и свопы и (.) . (.)s