我经常使用一个函数,它让我能够以一种更自然的方式编写代码。
infixl 6 $:
($:) :: a -> (a -> b) -> b
a $: f = f a
这让我可以做类似于这样的事情
let x = getData
$: sort
$: group
$: aggregate
取代
let x = aggregate
$ group
$ sort
$ getData
我最近了解到Clojure内置了类似的功能(我并不了解Clojure,但我认为它应该是写成(-> getData sort group aggregate)
?)。这让我想知道Haskell是否也内置了此功能。然而,在Hoogle上搜索没有结果。是否有任何标准库包含类似的功能?如果我的代码中有这样一个常见部分是特定于个人的,那么可能会使其他人难以阅读我的代码。
#
,因为它从根本上来说与对象的方法选择相同,并且在OCaml中用于此操作的运算符是#
。或者,仿照F#,我们可以使用|>
。 - Philip JFflip ($)
引入 Data.Function,但由于无法达成共识,因此被放弃了。对于初学者来说,这样的东西是否有用(相对于会让人困惑等)存在争议。以下是讨论链接:http://markmail.org/message/vsplpb7aajp7goqo?q=python - David&
运算符现在已经被广泛使用(大概是多亏了高度有影响力的lens
库,该库将其包含在其标准编码风格中)。 - leftaroundabout