gpt4 book ai didi

haskell - Conduit 的类似 fork 的功能

转载 作者:行者123 更新时间:2023-12-02 15:35:49 27 4
gpt4 key购买 nike

我想计算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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com