Когда использовать бессмысленный стиль? - PullRequest
14 голосов
/ 15 марта 2011

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

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

Ответы [ 2 ]

14 голосов
/ 15 марта 2011

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

Я могуПодумайте об одном, а о другом нет:

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

Причина привлечения комбинаторов из общих типов управления не только для того, чтобы прояснить ваше значение, но и для напоминания о том, что они существуют и часто полезны не только для бессмысленных определений, но и для решения проблем.

Как и во всем, нужно быть осторожным, чтобы не переусердствовать.Бессмысленное определение, включающее слишком много функций объединения, может быстро усложниться.

12 голосов
/ 15 марта 2011

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

...