我一直在尝试新的管道 http 包,我有一个想法。我有两个用于网页的解析器,一个返回行项目,另一个返回页面其他地方的数字。当我抓取页面时,最好将这些解析器串在一起并从同一个字节串生产者同时获取它们的结果,而不是两次获取页面或将所有 html 提取到内存中并解析两次。
换句话说,假设您有两个消费者:
c1 :: Consumer a m r1
c2 :: Consumer a m r2
是否可以制作这样的功能:
combineConsumers :: Consumer a m r1 -> Consumer a m r2 -> Consumer a m (r1, r2)
combineConsumers = undefined
我已经尝试了几件事,但我无法弄清楚。我知道如果不可能,但这会很方便。
编辑:
很抱歉,由于我对管道-attoparsec 的经验导致我提出了错误的问题,因此我对管道-attoparsec 做出了假设。当我假设它会返回一个管道使用者时,管道-attoparsec 将一个 attoparsec 转换为一个管道解析器。这意味着我实际上不能将两个 attoparsec 解析器转换为接受文本并返回结果的消费者,然后将它们与普通的旧管道生态系统一起使用。对不起,我只是不明白管道解析。
尽管这对我没有帮助,但 Arthur 的答案与我提出这个问题时所设想的差不多,而且我将来可能最终会使用他的解决方案。与此同时,我将使用导管。