61得票1回答
一个处理通道,2个相同类型的IO源

在我的 GHC Haskell 应用程序中,我使用 stm、network-conduit 和 conduit,为每个套接字都创建了一个分支线程,这是通过 runTCPServer 自动完成的。不同的分支线程可以通过广播 TChan 进行通信。 下面是我想要设置 conduit “链”的示例...

51得票3回答
管道/导管试图解决什么问题?

我看到有人推荐使用管道/导管库来处理各种惰性 IO 相关的任务。这些库究竟解决了什么问题? 而且当我尝试使用某些与 hackage 相关的库时,很可能会出现三个不同版本的情况。例如: attoparsec pipes-attoparsec attoparsec-conduit 这让我...

34得票2回答
枚举器、导管和管道的优缺点是什么?

我希望能听到比我更深入了解的人,关于枚举器、导管和管道之间的基本区别,以及它们的主要优缺点。已经有一些讨论正在进行中, 但是有一个高层次的概述会很好。

29得票1回答
机器和导管(或其他类似的库)之间的概念区别是什么?

我想学习这个概念,以便能够理解和使用类似machines的库。 我试图跟随Rúnar Bjarnason有关machines的演讲,但信息太少了,基本上只有一堆数据类型。我甚至无法理解k在哪里。 newtype Machine k o = Step k o (Machine k o) da...

21得票2回答
什么是合并两个sink的首选方法?

我用过 zipSinks :: Monad m => Sink i m r -> Sink i m r' -> Sink i m (r, r'),但它已被认为是弃用的。

19得票2回答
迭代器(Iteratees)和FRP之间有什么联系?

在我看来,这两个想法之间存在着很强的联系。我的猜测是,如果有一种方法可以使用Iteratees表达任意图形结构,那么FRP就可以用Iteratees实现。但据我所知,Iteratees仅支持链式结构。 能否有人解答一下这个问题?

14得票2回答
带类约束的GHC重写规则

我已经成功将以下重写规则添加到通道中: 无问题: {-# RULES "ConduitM: lift x >>= f" forall m f. lift m >>= f = ConduitM (PipeM (liftM (unConduitM . f) m)...

13得票2回答
管道的剩余物有什么好处?

我正在尝试理解conduit和pipes之间的区别。与pipes不同,conduit具有剩余概念。剩余物有什么用处?我想看一些必要的剩余物示例。 由于pipes没有剩余概念,是否有任何方法可以实现类似的行为?

12得票4回答
我该如何在Haskell中实现“cat”命令?

我正在尝试用 Haskell 编写一个简单的 `cat` 程序。我想要将多个文件名作为参数传入,然后按顺序将每个文件输出到标准输出(STDOUT),但是我的程序只会打印一个文件并退出。 我需要做什么才能让代码打印出每个文件,而不仅仅是第一个传入的文件呢?import Control.Mona...

12得票1回答
“更简单的方法”是什么,它弃用了 Data.Conduit.Util 中 zip 的必要性?

开始使用conduit,我注意到在Data.Conduit.Util中有以下内容: 来自较旧版本的conduit的实用函数。应将这些函数视为不推荐使用,因为现在有更容易处理它们的用例的方法。该模块仅用于向后兼容。 特别关心的是zip :: Monad m => Source ...