我想计算http post body的哈希值并在接收时同时解析它,所以我需要这样的函数:
unionSinks :: Monad m => Consumer a m r1 -> Consumer a m r2 -> Consumer a m (r1, r2)
unionSinks = ...
sinkBody :: Monad m => FromJSON v => Consumer ByteString m (Digest SHA1, v)
sinkBody = sinkHash `unionSinks` sinkParser json
当我开发图片上传时,我以类似的方式使用了passthroughSink
。但在本例中,我不需要管道的结果,它将图像保存到文件。
通常,我知道如何使用类似 MVar 的东西来实现 fork,但我不确定这是否是最佳解决方案。
最佳答案
确实你需要ZipSink
(或更通用的ZipConduit
):
import Control.Applicative
import Data.Conduit
unionSinks :: (Monad m) => Sink a m r1 -> Sink a m r2 -> Sink a m (r1, r2)
unionSinks s1 s2 = getZipSink ((,) <$> ZipSink s1 <*> ZipSink s2)
关于haskell - Conduit 的类似 fork 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32287364/