【问题标题】:When to use pointless style?什么时候使用无意义的风格?
【发布时间】:2011-07-15 08:24:21
【问题描述】:

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

请给我一些基本的指导,你认为无意义的风格什么时候有用,什么时候没有。例如,如果我必须使用部分合成来代替(类似于flip ((.) . take) . drop),我总是使用 lambda。

【问题讨论】:

标签: haskell coding-style pointfree


【解决方案1】:

这显然是个人风格问题。我认为 pointfree 样式是一种用于阐明您的想法的工具,并且将(->) a 视为Monad 和将(->) 视为Arrow 是一件好事,如果它可以达到这个目的。

我能想到一种可以,一种不能:

  • 不要用柯里化的作文作曲,它太复杂了,无法剖析,例如,(sort .) . (++) 最好写成\xs ys -> sort (xs ++ ys)
  • 请使用标准 Control.* 模块中的任何组合器,例如,将 curry (negate *** (+1)) 使用 (->) 作为 Arrowap (zipWith (+)) tail 使用 (->) [a] 作为 Monad

使用来自常见控件类型的组合子的原因不仅是为了使您的含义清晰,而且还提醒您它们存在并且通常很有用,不仅用于进行无点定义,还用于解决问题。

与所有事情一样,应该小心不要过度使用它。涉及太多组合函数的无点定义很快就会变得复杂。

【讨论】:

    【解决方案2】:

    如果有疑问,只需使用(.) 编写函数即可。不要进入翻转和交换和(.) . (.)s

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多