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