【发布时间】:2012-01-28 04:10:09
【问题描述】:
我正在尝试使用attoparsec 解析器编写Conduit。具体来说,给定parseOne :: Parser T,我想构造一个Conduit ByteString m T,它重复地将解析器应用于输入并流式传输结果。
attoparsec-conduit 提供sinkParser 将Parser 转换为Sink,但是我如何将这个Sink 转换为Conduit?我正在寻找的是这样的功能:
conduitSink :: (Resource m) => Sink a m b -> Conduit a m b
它反复将数据输入Sink,并生成每个结果。看起来它可以很容易地编写为手动循环,但我想知道是否有更好的方法。
管道库中缺少这个看似显而易见的功能让我觉得我可能做错了什么;有没有更好的方法来做到这一点?用例是将原始字节转换为基于消息的网络协议的解析形式,以供管道的后续阶段处理。感谢blaze-builder-conduit,我已经有了相反的方向(即Conduit T m ByteString),所以这似乎是构建事物的最自然的方式。
【问题讨论】: