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

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

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


person fuz    schedule 14.03.2011    source источник
comment
Когда бессмысленное заимствовало бессмысленный способ обозначения этого стиля? Потому что я должен сказать, что мне действительно забавно называть чей-то код бессмысленным.   -  person CodexArcanum    schedule 15.03.2011
comment
Я думаю, это главным образом потому, что lambdabot в freenode: #haskell называет это так, в основном как шутливое наблюдение, что это часто делает код менее читаемым.   -  person geekosaur    schedule 15.03.2011
comment
stackoverflow.com/questions/2464406/point-free-in-haskell   -  person sclv    schedule 15.03.2011
comment
stackoverflow.com/ questions / 944446 /   -  person sclv    schedule 15.03.2011
comment
@CodexArcanum, впервые я увидел бессмысленность в The Evolution of a Haskell Programmer willamette.edu/~fruehr/haskell/evolution.html   -  person sastanin    schedule 15.03.2011


Ответы (2)


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

Я могу придумать одно, а другое - нет:

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

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

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

person HaskellElephant    schedule 14.03.2011

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

person Don Stewart    schedule 14.03.2011