我想计算http帖子主体的哈希值,并在接收时同时解析它,因此我需要一个这样的函数:

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 - 导管的叉状功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32287364/

10-10 16:04