我知道Conduit是解决流数据问题的解决方案 处理恒定内存中的数据。
我在hackage中看到很多库都附有管道名称。 一些例子是cvs-conduit,zlib-conduit,attoparsec-conduit, 等
那么,如何制作一些普通的库管道呢?只需使用主conduit 包,它是否有资格提供流数据的解决方案 问题?
我试图深入研究csv-conduit的来源,这是方法 太复杂了。 (比完整的csv更大(更大) 在RWH书中实现的解析器。)此github library实际上使用了Conduit,那么它是否也处理常量内存中的流数据?
答案 0 :(得分:3)
是的,主管道包几乎是你需要开始的一切。
您的想法是在Conduit
中组织工作流程。拿一些元素 - 推出一些元素。在基本级别上,只需使用await
和yield
即可。只需在monad中使用它们,就像这样:
idConduit =
do mElt <- await
case mElt of
Nothing -> return ()
Just element ->
do yield element
idConduit
然后你将它们放在Sink
和Source
之间,如mySink $= myConduit1 $= myConduit2 $$ mySource
,你就完成了。
如果您想用它们阅读文件,请尝试attoparsec-conduit
。