【发布时间】:2018-10-11 13:12:30
【问题描述】:
我正在尝试使用 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 的资源,但我不知道如何继续这个 mi Monad,我认为 ResourceT 是候选者:
所以我有以下签名的来源:
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))
【问题讨论】: