haskell - 带有管道的源中的无限循环

标签 haskell conduit

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

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

如果我运行:
runResourceT $ (tempfiles $$ CL.take 5)

我得到一个无限循环。为什么它不只运行五次并给我五个 () 的列表?

最佳答案

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

关于haskell - 带有管道的源中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11323000/

相关文章:

java - TLS 认证。带 CXF 导管的 TLS 参数

Haskell http-conduit web-scraping daemon 崩溃并出现内存不足错误

haskell - 为什么 Haskell 中不允许同时定义所有类型的函数?

Haskell 折叠和堆栈溢出?

haskell - 这个haskell样本可以更短吗?

haskell - Conduit - 分派(dispatch)到多个输出文件

haskell - 使用管道的顺序二进制数据解码

algorithm - Haskell:对几乎排序的数组进行排序

list - 如何通过不使用 "list comprehensions"获取列表中元素的索引?

haskell - 将 http-conduit 连接到 xml-conduit