问题标签 [conduit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 具有多个输入的熔断导管
我正在尝试创建一个可以使用多个输入流的管道。我需要能够以无特定顺序(例如,不交替)等待一个或另一个输入流,从而使 zip 无用。这里没有任何并行或不确定的事情发生:我在一个流或另一个流上等待。我希望能够编写类似于以下的代码(分别在第一个或第二个输入流上的 whereawaitA
和awaitB
await ):
我最好的解决方案是让内部单子成为另一个管道,例如
然后允许
这主要是有效的。不幸的是,这似乎使得在外导管完全连接之前很难熔合到内导管。我尝试的第一件事是:
但这不起作用,至少在x
有状态的情况下,因为(x =$=)
多次运行,x
每次都有效地重新启动。
有没有办法写 fuseInner,而不是闯入导管的内部(看起来会很乱)?有没有更好的方法来处理多个输入流?我只是远远超出了管道的设计目的吗?
谢谢!
haskell - 什么是弃用 Data.Conduit.Util 的 zip 的“更简单的方法”?
开始使用conduit
,我注意到在Data.Conduit.Util中:
来自旧版本管道的实用程序功能。这些应该被视为已弃用,因为现在有更简单的方法来处理它们的用例。此模块仅用于向后兼容。
我特别关心的是zip :: Monad m => Source m a -> Source m b -> Source m (a, b)
。这对我来说似乎非常有用——我可以独立地研究一种产生a
s 的方式和一种产生 s 的方式b
,然后zip
在我需要它们时将它们放在一起,而不必在过程的早期混合关注点。
但是,就像我说的,我是管道方面的新手,所以我很无知。这些“处理用例的更简单方法”是什么?
haskell - 管道中的 IO 操作?
这可能是一个非常晦涩的案例,但请多多包涵。
我正在编写一个需要下载网页并将其保存到本地磁盘的网络爬虫。同时,作为爬虫,它需要在每个页面上找到超链接并下载这些链接的页面。
现在我正在查看此页面上给出的第一个示例代码。我正在尝试编写这种类型的管道:
然后我将替换示例代码中的这一行:
用这条线:
所以我要做的是实现一个名为 processLink 的管道,它处理一个 ByteString,从中提取链接,然后将原始 ByteString 传递给 sinkFile 以便可以保存页面。然后我可以递归地调用这些链接上的函数来下载这些链接的页面。
但是,由于 processLink 是一个纯函数,我似乎无法在 processLink 中执行任何 IO 操作,因此无法执行我需要的操作,例如下载这些链接页面。或者我可以吗?我能做些什么来解决这个问题?
networking - Haskell:网络管道“回调”问题
我正在使用 network-conduit 和 runTCPServer 为我搁浅的服务器供电。
在这种情况下:
协议多久执行一次?如果我希望在客户端套接字上每隔一段时间及时执行某些事情,将其逻辑放在协议中是否安全,还是仅在每次数据实际到达时才调用它?
如果您解释管道“回调”的工作方式,我将不胜感激。:)
问候。
networking - 1个处理管道,2个同类型IO源
在我GHC Haskell
使用 stm、network-conduit 和管道的应用程序中,每个套接字都有一个链,它使用runTCPServer
. Strands 可以通过使用广播 TChan 与其他 strands 进行通信。
这展示了我想如何设置管道“链”:
所以,我们这里有两个源(每个都绑定到辅助管道),它们产生一个Packet
对象,该对象encoder
将接受并变成ByteString
,然后发出套接字。我在两个输入的有效融合(性能是一个问题)方面遇到了很大的困难。
如果有人能指出我正确的方向,我将不胜感激。
由于我不尝试就发布这个问题是不礼貌的,所以我将把我之前尝试过的内容放在这里;
我已经编写/挑选了一个函数,该函数(阻塞)从 TMChan(可关闭通道)产生 Source;
同样,将 Chan 转换为 sink 的函数;
那么mergeSources 就很简单了;fork 2 个线程(我真的不想这样做,但到底是什么),可以将他们的新项目放入一个列表中,然后我会生成一个列表;
虽然我成功地对这些函数进行了类型检查,但我没有成功地利用这些函数进行类型检查;
无论如何,我认为这种方法存在缺陷——有许多中间列表和转换。这对性能不利。寻求指导。
PS。据我所知,这不是重复的;将具有多个输入的管道融合在一起,因为在我的情况下,两个源都产生相同的类型,我不在乎从哪个源产生Packet
对象,只要我不等待一个而另一个有准备使用的对象。
聚苯乙烯。对于示例代码中 Lens 的使用(以及知识要求),我深表歉意。
haskell - 管道单子 whileJust_ 问题
考虑以下使用 Lens、Conduit 和 Monad-Loops 的 Haskell 代码:
通过大量的提升,我无法解决以下类型错误:
一些指导或建议将不胜感激。请记住,这processBroadcast
需要 Session 携带的状态进行处理。
monad-loops 文档:http ://hackage.haskell.org/packages/archive/monad-loops/0.4.2/doc/html/Control-Monad-Loops.html
管道文档: http ://hackage.haskell.org/packages/archive/conduit/1.0.6/doc/html/Data-Conduit.html
stm (TChan) 文档: http ://hackage.haskell.org/packages/archive/stm/2.4.2/doc/html/Control-Concurrent-STM-TChan.html
haskell - Machines 和 Conduits(或其他类似库)之间的概念区别是什么?
我想学习这个概念,以便能够理解和使用机器等库。
我尝试关注Rúnar Bjarnason 关于机器的演讲,但信息太少,基本上只是一堆数据类型。k
我什至无法理解里面有什么
或者是什么t
以及为什么要量化。或者,类似管道的库和机器之间的概念区别是什么?
haskell - How to flush a network stream when using network-conduit?
I'm trying to use network-conduit as a backend for (patched) HaskellNet's IMAP. How can I force the conduit to flush the stream? This is a required operation, but it seems there is no such thing in network-conduit.
haskell - 如何检测管道中输入的结束?
我正在尝试使用network-conduit作为(已修补)HaskellNet 的IMAP的后端。所需的操作之一是检测流是否打开。目前我正在使用
这是正确的,还是有更好的方法?
haskell - 如何从管道中读取不同的块(例如直到 LF 的一行,然后是 10 个字节)?
对于一个网络协议,我需要能够从Source m ByteString
. 有lines
组合器,它将输入拆分为行,但我需要能够组合读取行和固定数量的字节。
我目前的方法是创建一个辅助函数:
| 在输入上折叠给定的函数。在函数返回时重复并将
Left
其结果累积到一个列表中。当函数返回时Right
,连接累积的结果(包括最后一个)并返回它,使用leftover
.Nothing
如果没有可用的输入则返回。
使用此功能,我创建了特定的消费者:
有没有更好的办法?我想这个问题一定已经在某个地方解决了。