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

Haskell 什么时候使用无意义的风格?,haskell,coding-style,pointfree,Haskell,Coding Style,Pointfree,包括我在内的许多haskell程序员都喜欢无意义的风格,尤其是在编写复杂的解析器时。它们使代码更具可读性,更少冗长。但有时,情况正好相反(例如,当滥用Monad的实例和(>)a的朋友时) 请给我一些基本的指导,你认为无意义的风格什么时候有用,什么时候不有用。例如,如果我不得不使用部分合成(如翻转((.)take.drop),我总是使用lambda。如果有疑问,只需使用(.)合成函数即可。不要进入翻转和交换以及()。这显然是个人风格的问题。我认为无点风格是一种澄清你想法的工具,如果能达到这个目的,

包括我在内的许多haskell程序员都喜欢无意义的风格,尤其是在编写复杂的解析器时。它们使代码更具可读性,更少冗长。但有时,情况正好相反(例如,当滥用
Monad
的实例和
(>)a
的朋友时)


请给我一些基本的指导,你认为无意义的风格什么时候有用,什么时候不有用。例如,如果我不得不使用部分合成(如
翻转((.)take.drop
),我总是使用lambda。

如果有疑问,只需使用
(.)
合成函数即可。不要进入翻转和交换以及
()。这显然是个人风格的问题。我认为无点风格是一种澄清你想法的工具,如果能达到这个目的,那么将
(>)a
视为
单子
,将
(>)
视为
箭头
是一件好事

我能想到一个做和一个不做:

  • 不要用咖喱作曲,它太复杂了,很难分解,例如,
    (排序)。(++)
    最好编写
    \xs-ys->sort(xs++ys)
  • 务必使用标准
    控件中的任何组合符。*
    模块,例如,使用
    (>)
    作为
    箭头
    写入
    咖喱(否定***(+1))
    ,使用
    (>)
    作为
    单子
    写入
    ap(带(+))尾部
使用来自常见控件类型的组合符的原因不仅是为了让您的意思更清楚,而且还提醒您,这些组合符是存在的,并且通常非常有用,不仅可以用于创建无点定义,还可以用于解决问题


与所有事情一样,一个人应该小心不要做得太多。涉及太多组合函数的无点定义可能很快变得复杂。

什么时候“无点”取代了“无点”作为引用这种样式的方式?因为我不得不说,我觉得将一个人的代码称为“无意义”真的很有趣。我认为这主要是因为freenode中的lambdabot:#haskell称之为“无意义”,这主要是一种诙谐的观察,它确实会降低代码的可读性。@CodexArcanum,我第一次看到“无意义”是在haskell程序员的进化过程中