我决定尝试处理conduit,我认为我做得很好,但是当我尝试用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)我得到了一个无限循环。为什么不直接运行五次,给我一个包含五个()的列表呢?
发布于 2012-07-04 14:37:16
在conduit 0.4中,yield不执行自动终止。这是0.5版本中的一个重要变化;您的代码在那里可以按预期工作。
https://stackoverflow.com/questions/11323000
复制相似问题