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

发布于 2024-10-21 19:28:42 字数 249 浏览 1 评论 0原文

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

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

Many haskell programmers, including me, like pointless style, especially when writing complicated parsers. They make code more readable and less verbose. But sometimes, it's just the other way round (for instance while abusing the instances of Monad and friends for (->) a).

Please give me some basic guideline, when do you think that pointless style is useful and when not. For instance, I always use a lambda if I had to use a partial composition instead (something like flip ((.) . take) . drop).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鲜肉鲜肉永远不皱 2024-10-28 19:28:42

这显然是个人风格的问题。我认为 pointfree 风格是一个澄清你的想法的工具,并将 (->) a 视为 Monad(->) 作为一个 Arrow 如果它能达到这个目的,那么它是一件好事。

我可以想到一件事该做,一件事不该做:

  • 不要用柯里化的组合来写作,它太复杂了,无法剖析,例如,(sort .)。 (++) 最好写成 \xs ys ->排序(xs ++ ys)。
  • 请使用标准 Control.* 模块中的任何组合器,例如,使用 (->)< 编写 curry (negate *** (+1)) /code> 作为 Arrowap (zipWith (+)) tail 使用 (->) [a] 作为 莫纳德。

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

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

This is obviously a matter of personal style. I think that pointfree style is a tool for clarifying your ideas, and viewing (->) a as a Monad and (->) as an Arrow is a good thing if it serves that purpose.

I can think of one do and one don't:

  • Don't compose with curried composition, it's just too complicated to dissect,e.g.,(sort .) . (++) is best written \xs ys -> sort (xs ++ ys).
  • Do use any combinator from the standard Control.* modules, e.g., write curry (negate *** (+1)) using (->) as an Arrow and ap (zipWith (+)) tail using (->) [a] as a Monad.

The reason to involve combinators from common control types isn't just to make your meaning clear but also it reminds you that these exists and are often useful, not only for making pointfree definitions but also for solving problems.

As with all things one should be careful not to over do it. A pointfree definition involving too many combining functions can quickly become complicated.

初吻给了烟 2024-10-28 19:28:42

如果有疑问,只需使用 (.) 组合函数即可。不要陷入翻转和交换以及 (.) 。 (.)

If in doubt, just compose functions with (.). Don't step into flips and swaps and (.) . (.)s

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文