Http 与安全管道交错

Http 与安全管道交错,http,haskell,streaming,haskell-pipes,haskell-wai,Http,Haskell,Streaming,Haskell Pipes,Haskell Wai,我使用管道和WAI来传输音频。问题是,我需要在安全管道中查找一些数据,然后根据提取的信息选择响应头,然后继续将该管道作为响应主体进行流式处理。以下是我现在所拥有的以及可以正常工作的: respond $ Wai.responseStream status200 headers $ \write flush -> do runSafeT $ runEffect $ do (mph, chunks) <- lift $ Mpeg.headerFromPipe pi

我使用管道和WAI来传输音频。问题是,我需要在安全管道中查找一些数据,然后根据提取的信息选择响应头,然后继续将该管道作为响应主体进行流式处理。以下是我现在所拥有的以及可以正常工作的:

respond $ Wai.responseStream status200 headers $ \write flush -> do
    runSafeT $ runEffect $ do
        (mph, chunks) <- lift $ Mpeg.headerFromPipe pipe
        for chunks $ \chunk -> liftIO $ do
            write $ BB.byteString chunk
            flush     
所以问题是:有没有办法在
headerFromPipe
for
之间移动
response
,以使用
mph
选择要给予的标题。我不能将
headerFromPipe
for
拆分为两个不同的计算线程,因为首先
runSafeT
将完成管道,而
chunk
管道(这是执行几次、检查数据、返回内容并与其余部分链接的结果)将失败

respond :: Response -> IO ResponseReceived

Mpeg.headerFromPipe :: Monad m 
    => Producer ByteString m r
    -> m (Mpeg.Header, Producer ByteString m r)

pipe :: Producer ByteString (SafeT IO) ()

Wai.responseStream :: Status -> ResponseHeaders -> StreamingBody -> Response

type StreamingBody = (Builder -> IO ()) -> IO () -> IO ()