[英]Conduit and creating conduit based libraries
我知道Conduit是处理常量内存中数据的流数据问题的解决方案。
我看到许多带有管道名称的hackage库。 一些例子是cvs-conduit , zlib-conduit , attoparsec-conduit等。
那么,如何制作一些普通的图书馆管道呢? 只需使用主管道包,它是否有资格为流数据问题提供解决方案?
我试图深入研究csv-conduit的来源,这太复杂了。 (比在RWH书中实现的完整的csv解析器更大(更大)。)此github库实际上也使用了Conduit,那么它是否也处理常量内存中的流数据?
是的,主管道包几乎是你需要开始的一切。
我们的想法是您在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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.