9得票2回答
多输入融合管

我正在尝试创建一个能够消费多个输入流的导管。我需要能够无序地等待其中一个或另一个输入流(例如,不是交替进行),使zip无用。这里没有任何并行或非确定性的操作:我在其中一个流或另一个流上等待。我希望能够编写类似以下代码的代码(其中awaitA和awaitB分别在第一个或第二个输入流上等待): ...

8得票1回答
提高基于管道的系统性能的方法

我使用Haskell进行基于行的数据处理,即可以应用sed、awk和类似工具的任务。作为一个简单的例子,让我们在标准输入的每一行前面加上000。 我有三种不同的方法来完成这个任务: 使用惰性IO和惰性ByteString 基于行的传送带。 基于块的传送带,内部使用纯严格的ByteStri...

8得票1回答
导管广播

几天前,我问了这个问题。现在我需要一个纯单线程版本的这个函数: 重申一遍,我需要一个函数,它将每个接收到的值发送到每个接收器并收集它们的结果。函数的类型签名应该是这样的: broadcast :: [Sink a m b] -> Sink a m [b] 最好的Sven 附...

8得票1回答
导管:多个流消费者

我编写了一个程序,用于统计语料库中NGram的频率。我已经有一个函数,可以处理一个令牌流并生成单一顺序的NGram: ngram :: Monad m => Int -> Conduit t m [t] trigrams = ngram 3 countFreq :: (Ord t...

8得票4回答
导管和插座:允许多个连接

这是一段使用 conduit、network-conduit和stm-conduit实现小型接收服务器的代码。它在套接字上接收数据,然后通过 STM 通道流式传输至主线程。 import Control.Concurrent (forkIO) import Control.Concurren...

8得票2回答
导管 - 管道内的多个输出文件

我正在编写一个程序,将输入文件拆分为多个文件(Shamir's Secret Sharing Scheme)。 以下是我想象中的流程: source:使用Conduit.Binary.sourceFile从输入读取 conduit:接受ByteString,生成[ByteString] ...

8得票2回答
Haskell中的http-conduit网络爬虫守护程序因内存不足而崩溃

我用Haskell写了一个守护进程,每5分钟从网页上爬取信息。虽然原本这个守护进程可以运行50分钟左右,但是后来出现了内存不足的错误(out of memory (requested 1048576 bytes)),并且每次运行都在同样的时间点崩溃。即使将它设置为30秒睡眠,它也会在8分钟后崩...

7得票1回答
我该如何将一个Sink转换成一个Conduit?

我正在尝试编写一个使用attoparsec解析器的Conduit。具体来说,给定parseOne :: Parser T,我想构建一个Conduit ByteString m T,它将解析器重复应用于输入并流式传输结果。 attoparsec-conduit提供了sinkParser将Par...

7得票1回答
Haskell的FreeT类型和Coroutine类型有什么关系?

在《Monad.Reader Issue 19》的“Coroutine Pipelines”文章中,作者定义了一个通用的Coroutine类型: newtype Coroutine f m a = Coroutine { resume :: m (Either (f (Coroutine...

7得票1回答
使用ResourceT正确清理资源的方法是什么?

我一直在尝试使用conduit-extra的UNIX包,它基本上允许使用UNIX域套接字轻松创建服务器,特别是使用runUnixServer函数。 问题是函数退出后它不会清理套接字文件,这意味着需要手动清理。以下是一个简单的示例,它基本上创建了一个回显服务器。 main :: IO () ...