:: a - >(a - > b) - > b运算符(Haskell)

use*_*541 17 haskell

编写Haskell程序我发现自己需要这样的运算符.

(|>) :: a -> (a -> b) -> b
(|>) = flip ($)
infixl 0 |>
Run Code Online (Sandbox Code Playgroud)

我认为将多个功能粘合在一起很有用.

tText cs = someFun cs   |>
           lines        |>
           map (drop 4) |>
           reverse
Run Code Online (Sandbox Code Playgroud)

我更喜欢它,.因为|>应用函数的顺序与函数的编写顺序相同.

tText' cs = reverse      . 
            map (drop 4) . 
            lines        . 
            someFun $ cs
Run Code Online (Sandbox Code Playgroud)

问题是:这是(|>)Prelude某些其他基本库中已存在的东西吗?重新实现简单的东西是愚蠢的,我想避免.

Hoogle搜索没有帮助.我发现的最近的东西是>>>(箭头),但它似乎有点矫枉过正.

And*_*ewC 16

不,我所知道的标准库中没有任何东西.多年前我的很多代码都导入了我的breif但是方便的Forwards模块:

> module Forwards where

> infixl 0 |>
> infixl 9 .>

> (|>) = flip ($)
> (.>) = flip (.)
Run Code Online (Sandbox Code Playgroud)

我甚至使用了和你一样的名字!

这些天我根本不使用它 - 我习惯了函数组合使用的顺序.

随意使用自己的方便快捷方式.

我也$比以前少用.我曾经写过的地方

thing = this $ that arg $ an other $ it
Run Code Online (Sandbox Code Playgroud)

现在我写

thing = this . that arg . an other $ it
Run Code Online (Sandbox Code Playgroud)


小智 7

您还可以将(|>)定义为"翻转id",并理解其工作原理,这是Haskell中使用的统一类型推断的一个很好的教训.