提升资源T上的管道T中的monad IO



我正在尝试在stm-conduit中使用具有以下签名的函数MergeSources:

mergeSources :: (MonadResource mi, MonadIO mo, MonadUnliftIO mi)
=> [ConduitT () a mi ()] -- ^ The sources to merge.
-> Int -- ^ The bound of the intermediate channel.
-> mo (ConduitT () a mi ())    

我有直接基于 IO 的资源,我不知道如何继续这个我相信 ResourceT 是候选者的 mi Monad:

所以我有以下签名的来源:

ConduitT () (Connection,WorkspaceId) IO ()

我想要这个签名:

ConduitT () (Connection,WorkspaceId) (ResourceT IO) ()

尽管我在这些操作中没有资源可以处理(我有一个连接,但它是全局的,这就是他们推荐的......(,我给你一个我想要使用的函数的例子

streamAllWorkspaceAlreadyCreated :: Connection -> ConduitT () (Connection,WorkspaceId) IO ()
streamAllWorkspaceAlreadyCreated  eventStoreConnection = do
yield eventStoreConnection
.| WorkspaceStream.streamAll
.| WorkspaceStream.discardCorruptedStreams
.| mapC (workSpaceId -> (eventStoreConnection,workSpaceId))

transPipe怎么样:https://hackage.haskell.org/package/conduit-1.3.1/docs/Data-Conduit.html#v:transPipe

transPipe :: Monad m => (forall a. m a -> n a) -> ConduitT i o m r -> ConduitT i o n r
transPipe liftIO :: ConduitT i o IO r -> ConduitT i o (ResourceT IO) r

最新更新