在Haskell中,点管道 ".|" 运算符是什么?

6
我理解 "."(点)代表函数组合。我理解 "|"(管道符号)表示“或者”,引入语法保护(来自{{link1:此处}}),但我在{{link2:http-conduits上看到了一个使用“.|”的答案}},我不理解这个运算符的用法。
我找到的其他有关conduits的参考资料,例如:

...建议使用“$$”、“$=”、“=$=”和“=$”这样的语法来组合数据流中的传送器。

我应该如何称呼这个“.|”运算符,它是如何工作的?

可以预见地,谷歌搜索“.| haskell”、“'dot pipe' haskell”或“'dot pipe' haskell operator conduits”并不成功。

2个回答

9
这只是conduit用于融合的(最近)新语法。作者不久前写了一篇关于此事的博客文章。引用该文章中的话,他建议(并最终实现了):

.|运算符替换$==$=$=这三个同义词。这借鉴了Unix shell的直觉,其中管道操作符表示将数据从一个进程传输到另一个进程。这个类比对于conduit非常适用,为什么不借鉴呢?(我们称所有这些运算符为“融合”)

另外,如果您需要查找运算符,请访问HayooHoogle。还有Stackage Hoogle(感谢@duplode),它可以让您查找特定解析器的运算符(在这里特别有用,因为这是最近的更改)。

3
Stackage Hoogle 是一个不错的选择——它的默认范围比 haskell.org 更广。 - duplode
1
谢谢,@Alec。如果你还能容忍我,我建议我们继续这些问答会话,直到我们的stackoverflow Q&A会话超越所有已经过时和被弃用的语法和策略,成为指引人们准确文献的顶尖搜索结果。 :) - Mittenchops
似乎更好将该操作符称为“管道”:/ - jberryman
2
嗯,开始不错:一小时后,这已经是“dot pipe haskell”在谷歌上的顶部搜索结果了。我现在又写了一遍这个短语,以便人们可以正确地重定向到Michael Snoyman在此答案中链接的语法公告。 - Mittenchops

1

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

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

fuse用于将conduit组合,就像.运算符用于函数组合一样。 最后,.|是一种新的语法,用来替换$==$=$=,它们本来就是同义词。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接