【发布时间】:2012-04-04 01:27:14
【问题描述】:
我有一个经常使用的函数,它允许我以一种对我来说更自然的方式编写代码。
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 是否也内置了它。不过,胡歌doesn't have any results。
是否有包含类似内容的标准库?如果我有这样一个共同的部分是特殊的,它可能会让其他人难以阅读我的代码。
【问题讨论】:
-
我的偏好是按照 OOHaskell 调用此操作
#,因为它与对象上的方法选择基本相同,而#是 OCaml 中用于此操作的运算符。或者,复制 F# 我们可以使用|> -
曾有过将
flip ($)引入Data.Function 的提议,但由于无法就这样的东西是否有用(反对让初学者感到困惑等)无法达成共识而被放弃。有。这是讨论:markmail.org/message/vsplpb7aajp7goqo?q=python -
你能接受Yoann B.'s answer吗?
&operator 现在已被广泛使用(可能主要归功于极具影响力的lens库,它包含在其标准编码风格中)。