2016-12-03 28 views
6

我明白“。” (点)作为功能组成。我明白“|” (管道)作为“或”,警卫介绍语法(从here),但我saw an answer on http-conduits using ".|",使用这个操作符以我不明白的方式。什么是点管“。” Haskell中的运算符?

我已经找到了管道的其他参考资料,如:

...建议语法,如 “$$”, “$ =”,“ = $ =“,”= $“用于在数据流中组合导管。

我该怎么称呼这个“。”这个操作员,它是如何工作的?

可以预计,使用“。| haskell”或“'点管'haskell'或''点管'haskell操作员管道”的搜索功能并不是非常成功。

回答

9

这只是conduit用于融合的(最近的)新语法。作者在不久前写了一篇关于这个的文章blog-post。从发布到引用,他提出了(最终这样做),以

更换$==$=$=运营商 - 与.|运营商 - 这是其他每个 的所有同义词。这借用了来自Unix的直觉,其中管道操作员表示从一个进程到另一个进程的管道数据到 。这个比喻对于管道来说确实很好,所以为什么不借用 呢?撇开(我们称这些运营商的“融合”。)

作为,如果你需要查找运营商,HayooHoogle是去的地方。还有Stackage Hoogle(谢谢@duplode),它可以让你查找特定解析器的运算符(由于这是最近的变化,所以在这里特别有用)。

+3

[Stackage Hoogle](https://www.stackage.org/lts-7.11/hoogle?q=.%7C)也是一个不错的选择 - 它默认比haskell.org更广泛的软件包一。 – duplode

+1

谢谢,@Alec。如果你会继续放纵我,我建议我们继续这些,直到我们的stackoverflow问答环节克服在旧版本和互联网上其他地方提供的所有过时和不推荐的语法和策略,并且这些成为顶级命中,正确的文件。:) – Mittenchops

+0

似乎他们会更好地称呼操作员“管道”:/ – jberryman

1

.|Conduit库引入,是fuse的同义词。

fuse 
    :: Monad m => Conduit a m b -> ConduitM b c m r -> ConduitM a c m r 

fuse被用于conduit S中的相同方式组成.运算符用于功能的组合物。 最后,.|是替代$=,=$=$=的新语法,无论如何它们都是同义词。