管理和创建基于管道的库

时间:2014-02-04 11:13:39

标签: haskell conduit

我知道Conduit是解决流数据问题的解决方案 处理恒定内存中的数据。

我在hackage中看到很多库都附有管道名称。 一些例子是cvs-conduitzlib-conduitattoparsec-conduit, 等

那么,如何制作一些普通的库管道呢?只需使用主conduit 包,它是否有资格提供流数据的解决方案 问题?

我试图深入研究csv-conduit的来源,这是方法 太复杂了。 (比完整的csv更大(更大) 在RWH书中实现的解析器。)此github library实际上使用了Conduit,那么它是否也处理常量内存中的流数据?

1 个答案:

答案 0 :(得分:3)

是的,主管道包几乎是你需要开始的一切。

您的想法是在Conduit中组织工作流程。拿一些元素 - 推出一些元素。在基本级别上,只需使用awaityield即可。只需在monad中使用它们,就像这样:

idConduit =
  do mElt <- await
     case mElt of
       Nothing -> return ()
       Just element ->
         do yield element
            idConduit

然后你将它们放在SinkSource之间,如mySink $= myConduit1 $= myConduit2 $$ mySource,你就完成了。

如果您想用它们阅读文件,请尝试attoparsec-conduit