Haskell功能从左到右

By simon at 2018-02-07 • 0人收藏 • 29人看过

我有一个我经常使用的函数,它允许我写我的 代码的方式对我来说似乎更自然。

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是否有bui也是如此。 Hoogle [没有任何 结果](http://www.haskell.org/hoogle/?hoogle=a+-%3E+%28a+-%3E+b%29+-%3E+b) 虽然。 是有什么标准的库包含类似的东西?这可能会使 我的代码很难让别人阅读,如果我有这样的COM周一部分是特质的。

4 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

没有这样的内置,但 [Control.Category.(>>>)](http://hackage.haskell.org/packages/archive/base/4.5.0.0/doc/html / CONTROl-Category.html#v%3a-62--62--62-)是关闭的:Control.Category.(>>>)5,所以你 可以写

f x = x $: sort $: group $: aggregate
f = sort >>> group >>> aggregate
有[没有短裤e的定义和名称](http://holumbus.fh- wedel.de/hayoo/hayoo.html?query=a%20-%3E%20%28a%20-%3E%20b%29%20-%3E%20b&start=0) 为你的($:)组合子。我认为功能倾向于适合管道 风格比简单的应用程序更频繁,所以我不觉得有什么需要 它; (>>>)虽然有点难看。 (此外,Haskell的非严格语义意味着f低数据不是 必须按照箭头指向的方向;毕竟, aggregate可以提供第一个co甚至sort之前的教练 有机会看看这个论点。所以我倾向于只使用(.)和 ($);我习惯了这个命令。)

2018-02-07   #2

没有这样的内置,但 [Control.Category.(>>>)](http://hackage.haskell.org/packages/archive/base/4.5.0.0/doc/html / CONTROl-Category.html#v%3a-62--62--62-)是关闭的:Control.Category.(>>>)5,所以你 可以写

f x = x $: sort $: group $: aggregate
f = sort >>> group >>> aggregate
有[没有短裤e的定义和名称](http://holumbus.fh- wedel.de/hayoo/hayoo.html?query=a%20-%3E%20%28a%20-%3E%20b%29%20-%3E%20b&start=0) 为你的($:)组合子。我认为功能倾向于适合管道 风格比简单的应用程序更频繁,所以我不觉得有什么需要 它; (>>>)虽然有点难看。 (此外,Haskell的非严格语义意味着f低数据不是 必须按照箭头指向的方向;毕竟, aggregate可以提供第一个co甚至sort之前的教练 有机会看看这个论点。所以我倾向于只使用(.)和 ($);我习惯了这个命令。)

2018-02-07   #3

您正在描述的反向应用程序运算符现在是 标准包base(自4.8.0)作为[& 操作者(https://hackage.haskell.org/package/base-4.8.2.0/docs/Data- Function.html#五:38页)。 请注意,这个运算符是用比你低的优先级来定义 建议(infixl 1)。

2018-02-07   #4

有一个名为流的图书馆 (https://hackage.haskell.org/package/flow-1.0.10/docs/Flow.html)可用 在Hackage中创建由泰勒Fausak这个确切的需求。 它使用|>运算符(受F#启发)作为线程最后一个。 例如:

3 |> succ |> recip |> negate
0.25

登录后方可回帖

Loading...