我有一个我经常使用的函数,它允许我以对我来说更自然的方式编写代码.
infixl 6 $:
($:) :: a -> (a -> b) -> b
a $: f = f a
Run Code Online (Sandbox Code Playgroud)
这让我做了类似的事情
let x = getData
$: sort
$: group
$: aggregate
Run Code Online (Sandbox Code Playgroud)
代替
let x = aggregate
$ group
$ sort
$ getData
Run Code Online (Sandbox Code Playgroud)
我最近了解到Clojure内置了类似的内容(我不太了解Clojure,但我认为它会被写入(-> getData sort group aggregate)?)这让我想知道Haskell是否也内置了它.但Hoogle 没有任何结果.
是否有包含类似内容的标准库?如果我有这样一个共同的部分是特殊的,它可能使我的代码很难让其他人阅读.
ehi*_*ird 22
没有像这样的内置,但是Control.Category.(>>>)很接近:它是flip (.),所以你可以写
f x = x $: sort $: group $: aggregate
Run Code Online (Sandbox Code Playgroud)
如
f = sort >>> group >>> aggregate
Run Code Online (Sandbox Code Playgroud)
有没有的定义和名称短缺为您的($:)组合子.我认为函数往往比简单的应用程序更适合管道样式,所以我觉得它没有什么需要; (>>>)但是有点难看.
(此外,Haskell的非严格语义意味着数据流不一定在箭头所指向的方向;毕竟,在有机会查看参数aggregate之前,可以提供第一个构造sort函数.所以我倾向于只是使用(.)和($);我习惯了订单.)