14

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

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

4

2 回答 2

14

这显然是个人风格问题。我认为无点风格是一种澄清你的想法的工具,如果它符合这个目的,那么将其(->) a视为 aMonad(->)as anArrow是一件好事。

我可以想到一种做和一种不做:

  • 不要用咖喱作文作曲,剖析太复杂了,例如,(sort .) . (++)最好写\xs ys -> sort (xs ++ ys)
  • 一定要使用标准Control.*模块中的任何组合器,例如,写curry (negate *** (+1))using (->)as anArrowap (zipWith (+)) tailusing (->) [a]as a Monad

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

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

于 2011-03-14T21:58:15.660 回答
12

如果有疑问,只需用(.). 不要踏入翻转和交换和(.) . (.)s

于 2011-03-14T21:48:05.310 回答