编写Haskell程序我发现自己需要这样的运算符。
(|>) :: a -> (a -> b) -> b
(|>) = flip ($)
infixl 0 |>
我认为将多个功能粘合在一起时很有用。
tText cs = someFun cs |>
lines |>
map (drop 4) |>
reverse
我比.
更喜欢它,因为使用|>
函数的顺序与函数的编写顺序相同。
tText' cs = reverse .
map (drop 4) .
lines .
someFun $ cs
问题是:|>
/其他基本库中是否存在这个(Prelude
)的内容?重新实现简单的东西是愚蠢的,我想避免。
Hoogle搜索没有帮助。我发现的最近的东西是>>>
(箭头),但似乎有点矫枉过正。
答案 0 :(得分:16)
不,我所知道的标准库中没有任何内容。多年前我的很多代码都导入了我的breif但是方便的Forwards
模块:
> module Forwards where
> infixl 0 |>
> infixl 9 .>
> (|>) = flip ($)
> (.>) = flip (.)
我甚至使用了和你一样的名字!
这些天我根本不使用它 - 我习惯了函数组合使用的顺序。
随意使用您自己的便捷捷径。
我也比以前少用$
。我曾经写过的地方
thing = this $ that arg $ an other $ it
现在我写
thing = this . that arg . an other $ it
答案 1 :(得分:12)
答案 2 :(得分:7)
您还可以将(|>)定义为"翻转ID",并理解其工作原理,这是Haskell中使用的统一类型推断的一个很好的教训。
答案 3 :(得分:0)
就我的经验而言,我不知道任何这样的图书馆。如果存在这样的库,我建议不要使用它。
除非您使用镜头包,否则我建议不要使用此类外部定义的操作符。 (如果是镜头包,你真的需要并且已经有这样的操作员。)
根据我的经验,恕我直言等...
如果可读性与正常成分相比增强,而不是通常的成分(不仅仅是在处理镜片时),在该模块中定义一个特殊的运算符或通过let
或{{在本地定义1}}。为此,我倾向于使用单个unicode符号而不是ascii组合。
where
几年前(当没有镜头的时候),我也想过为这些镜头定义自己的模块。但后来我逐渐使用那个模块,以至于我总是倾向于重新发明轮子。要让这些运算符在库中,甚至可以增加读取代码的工作量:读者必须查看那些很少使用的运算符。在这种情况下,本地定义的运算符更好。