什么时候使用毫无意义的风格?

fuz*_*fuz 14 haskell coding-style pointfree

包括我在内的许多haskell程序员都喜欢无意义的风格,特别是在编写复杂的解析器时.它们使代码更具可读性和更简洁.但有时,它只是反过来(例如在滥用实例Monad和朋友时(->) a).

请给我一些基本的指导,你什么时候认为毫无意义的风格是有用的,何时不是.例如,如果我不得不使用部分组合(类似的话flip ((.) . take) . drop),我总是使用lambda .

Has*_*ant 14

这显然是个人风格的问题.我认为pointfree风格是说明自己的想法,并查看工具(->) a作为Monad(->)作为Arrow是一个很好的事情,如果它所服务的目的所在.

我能想到一个人做,一个人不做:

  • 不要用咖喱的成分构成,它太复杂,不能解剖,例如,(sort .) . (++)写得最好\xs ys -> sort (xs ++ ys).
  • 不要使用从标准的任何组合子Control.*模块,例如,写入curry (negate *** (+1))使用(->)作为Arrowap (zipWith (+)) tail使用(->) [a]Monad.

让共同控制类型的组合子参与的原因不仅仅是让你的意思清楚,而且它提醒你这些存在并且通常是有用的,不仅用于制作无点定义,而且用于解决问题.

与所有事情一样,应该注意不要过度.涉及太多组合功能的无点定义可能很快变得复杂.


Don*_*art 12

如果有疑问,只需用函数编写函数(.).不要踏入翻转和掉期和(.) . (.)小号

  • 我不介意`(.).(.)`如果它被定义为`.:` (2认同)