gpt4 book ai didi

haskell - 美元运算符 ($) 是否被认为是不好的形式?为什么?

转载 作者:行者123 更新时间:2023-12-03 14:02:12 25 4
gpt4 key购买 nike

在 Haskell 中,我经常用 $ 编写表达式。我觉得它很自然且可读,但有时我读到它的形式很糟糕,不明白为什么会这样。

最佳答案

以下都是很好的形式:

foo = bar . baz . quux
foo x = bar . baz . quux $ x
foo x = (bar . baz . quux) x
foo x = bar (baz (quux x))

我将它们按我的喜好粗略排序,尽管口味总是不同的,而且上下文可能需要不同的选择。我也偶尔看到
foo = bar
. baz
. quux

当每个 bar , baz , 和 quux子表达式很长。以下是不好的形式:
foo x = bar $ baz $ quux $ x

这有两个原因不太可取。首先,在重构过程中可以复制和粘贴到辅助定义中的子表达式更少;与所有 ($)运算符,仅包含 x 的子表达式参数是有效的重构,而 (.)($)运算符甚至像 bar . baz 这样的子表达式或 baz . quux可以抽出来单独定义。

偏爱 (.) 的第二个理由预计 ($) 的固定性可能会发生变化;目前, ($)infixr ,表示它与右侧相关联,如下所示:
foo x = bar $ (baz $ (quux $ x))

但是, ($)如果它是 infixl,将在更多表达式中有用;例如,像
foo h = f (g x) (h y)
foo h = f $ g x $ h y
foo h = (f $ g x) $ h y

...目前无法在没有括号的情况下表示。 “错误形式”示例,当用 infixl 解析时应用程序,将是
foo x = ((bar $ baz) $ quux) $ x

这意味着一些明显不同的东西。因此,通过避免这种形式来使您的代码面向 future 。

关于haskell - 美元运算符 ($) 是否被认为是不好的形式?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8618811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com