首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带管道的源码中的无限循环

问带管道的源码中的无限循环
EN

Stack Overflow用户
提问于 2012-07-04 13:40:44
回答 1查看 213关注 0票数 4

我决定尝试处理conduit,我认为我做得很好,但是当我尝试用conduit 4创建这个简单的源代码时,我得到了一个无限循环,我不明白为什么。这是简化的,原始版本将创建一个临时文件名并通过yield返回它。这只返回一个()。

代码语言:javascript
复制
import Control.Monad.IO.Class

import Data.Conduit
import Data.Conduit.List as CL

tempfiles :: MonadIO m => Source m ()
tempfiles = loop
  where
    loop = do
      x <- liftIO $ print "tempfile"
      yield x
      loop

如果我运行:

代码语言:javascript
复制
runResourceT $ (tempfiles $$ CL.take 5)

我得到了一个无限循环。为什么不直接运行五次,给我一个包含五个()的列表呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-04 14:37:16

在conduit 0.4中,yield不执行自动终止。这是0.5版本中的一个重要变化;您的代码在那里可以按预期工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11323000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档