问题标签 [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.

0 投票
2 回答
1101 浏览

haskell - 具有多个输入的熔断导管

我正在尝试创建一个可以使用多个输入流的管道。我需要能够以无特定顺序(例如,不交替)等待一个或另一个输入流,从而使 zip 无用。这里没有任何并行或不确定的事情发生:我在一个流或另一个流上等待。我希望能够编写类似于以下的代码(分别在第一个或第二个输入流上的 whereawaitAawaitBawait ):

我最好的解决方案是让内部单子成为另一个管道,例如

然后允许

这主要是有效的。不幸的是,这似乎使得在外导管完全连接之前很难熔合到内导管。我尝试的第一件事是:

但这不起作用,至少在x有状态的情况下,因为(x =$=)多次运行,x每次都有效地重新启动。

有没有办法写 fuseInner,而不是闯入导管的内部(看起来会很乱)?有没有更好的方法来处理多个输入流?我只是远远超出了管道的设计目的吗?

谢谢!

0 投票
1 回答
286 浏览

haskell - 什么是弃用 Data.Conduit.Util 的 zip 的“更简单的方法”?

开始使用conduit,我注意到在Data.Conduit.Util中:

来自旧版本管道的实用程序功能。这些应该被视为已弃用,因为现在有更简单的方法来处理它们的用例。此模块仅用于向后兼容。

我特别关心的是zip :: Monad m => Source m a -> Source m b -> Source m (a, b)。这对我来说似乎非常有用——我可以独立地研究一种产生as 的方式和一种产生 s 的方式b,然后zip在我需要它们时将它们放在一起,而不必在过程的早期混合关注点。

但是,就像我说的,我是管道方面的新手,所以我很无知。这些“处理用例的更简单方法”是什么?

0 投票
1 回答
163 浏览

haskell - 管道中的 IO 操作?

这可能是一个非常晦涩的案例,但请多多包涵。

我正在编写一个需要下载网页并将其保存到本地磁盘的网络爬虫。同时,作为爬虫,它需要在每个页面上找到超链接并下载这些链接的页面。

现在我正在查看此页面上给出的第一个示例代码。我正在尝试编写这种类型的管道:

然后我将替换示例代码中的这一行:

用这条线:

所以我要做的是实现一个名为 processLink 的管道,它处理一个 ByteString,从中提取链接,然后将原始 ByteString 传递给 sinkFile 以便可以保存页面。然后我可以递归地调用这些链接上的函数来下载这些链接的页面。

但是,由于 processLink 是一个纯函数,我似乎无法在 processLink 中执行任何 IO 操作,因此无法执行我需要的操作,例如下载这些链接页面。或者我可以吗?我能做些什么来解决这个问题?

0 投票
1 回答
222 浏览

networking - Haskell:网络管道“回调”问题

我正在使用 network-conduit 和 runTCPServer 为我搁浅的服务器供电。

在这种情况下:

协议多久执行一次?如果我希望在客户端套接字上每隔一段时间及时执行某些事情,将其逻辑放在协议中是否安全,还是仅在每次数据实际到达时才调用它?

如果您解释管道“回调”的工作方式,我将不胜感激。:)

问候。

0 投票
1 回答
2322 浏览

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 的使用(以及知识要求),我深表歉意。

0 投票
1 回答
149 浏览

haskell - 管道单子 whileJust_ 问题

考虑以下使用 Lens、Conduit 和 Monad-Loops 的 Haskell 代码:

通过大量的提升,我无法解决以下类型错误:

一些指导或建议将不胜感激。请记住,这processBroadcast需要 Session 携带的状态进行处理。


0 投票
1 回答
2834 浏览

haskell - Machines 和 Conduits(或其他类似库)之间的概念区别是什么?

我想学习这个概念,以便能够理解和使用机器等库。

我尝试关注Rúnar Bjarnason 关于机器的演讲,但信息太少,基本上只是一堆数据类型。k我什至无法理解里面有什么

或者是什么t以及为什么要量化。或者,类似管道的库和机器之间的概念区别是什么?

0 投票
1 回答
334 浏览

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.

0 投票
1 回答
93 浏览

haskell - 如何检测管道中输入的结束?

我正在尝试使用network-conduit作为(已修补)HaskellNet 的IMAP的后端。所需的操作之一是检测流是否打开。目前我正在使用

这是正确的,还是有更好的方法?

0 投票
1 回答
250 浏览

haskell - 如何从管道中读取不同的块(例如直到 LF 的一行,然后是 10 个字节)?

对于一个网络协议,我需要能够从Source m ByteString. 有lines组合器,它将输入拆分为行,但我需要能够组合读取行和固定数量的字节。

我目前的方法是创建一个辅助函数:

| 在输入上折叠给定的函数。在函数返回时重复并将Left 其结果累积到一个列表中。当函数返回时Right,连接累积的结果(包括最后一个)并返回它,使用leftover. Nothing如果没有可用的输入则返回。

使用此功能,我创建了特定的消费者:

有没有更好的办法?我想这个问题一定已经在某个地方解决了。