haskell – 用postgresql-simple创建一个流媒体管道源
发布时间:2020-12-13 15:58:53 所属栏目:百科 来源:网络整理
导读:postgresql-simple提供用于流式查询的功能,例如, fold :: (FromRow row,ToRow params) = Connection - Query - params - a - (a - row - IO a) - IO a 我想创建一个充分利用流媒体的管道源. mySource :: (FromRow row,Monad m) = Source m row 不幸的是,因为
postgresql-simple提供用于流式查询的功能,例如,
fold :: (FromRow row,ToRow params) => Connection -> Query -> params -> a -> (a -> row -> IO a) -> IO a 我想创建一个充分利用流媒体的管道源. mySource :: (FromRow row,Monad m) => Source m row 不幸的是,因为IO在折叠中出现在逆向位置(我认为?),所以我真的很难对付这些类型.以下类型检查,但在产生值之前折叠整个流. getConduit :: Connection -> IO (C.ConduitM () Event IO ()) getConduit conn = fold_ conn queryEventRecord CL.sourceNull foo where foo :: C.ConduitM () Event IO () -> Event -> IO (C.ConduitM () Event IO ()) foo cond evt = pure (cond >> C.yield evt) 关于如何实现这一点的任何指针将不胜感激!谢谢! 解决方法
一个(不太好)的方式来解决这个问题
>创建一个新的 我没有办法对此进行测试,但以下情况应该有效 import Conduit import Database.PostgreSQL.Simple (foreach_) import Data.Conduit.TMChan (sourceTMChan) import Control.Concurrent.STM.TMChan (newTMChanIO,writeTMChan,atomically) mySource :: (FromRow row,MonadIO m) => Connection -> Query -> IO (Source m row) mySource connection query = do chan <- newTMChanIO forEach_ connection query (atomically . writeTMChan chan) pure (sourceTMChan chan) 如果我们只有forEach_ ::(MonadIO m,FromRow r)=>连接 – >查询 – > (r – > m()) – > m()这可能更容易…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- xml – For循环与apply-templates
- LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists(C
- 在Oracle SQL中将用户提示作为日期(甚至是字符串)传递
- PostgreSQL学习手册(模式Schema)
- swift setter导致exc_bad_access
- ruby – 为什么调用在方法中声明的返回Proc工作?
- reactjs – 我可以使用React Native构建3D或2D互动游戏吗?
- csync2+sqlite实现数据的高效实时的增量备份
- 为什么我们不能在oracle中的select语句中执行存储过程?有什
- xcode – 如何静态分析C和Objective-C代码?