作家Monad现在适合大型懒惰列表吗?

jam*_*idh 5 haskell

我已经在多个地方读过列表的编写器monad将该完整列表保存在内存中,因此不应该用于除小样本之外的任何其他内容(例如,不记录日志).

例如,请阅读此处

但是,为了测试声明,我编写了以下程序,并且实际上表明它成功地输出了一个懒惰的无限列表!

import Control.Monad.Writer

createInfiniteList :: Int -> Writer [Int] ()
createInfiniteList i = do
  tell [i]
  createInfiniteList (i+1)

main :: IO ()
main = do
  let x = execWriter $ createInfiniteList 1
  print x
Run Code Online (Sandbox Code Playgroud)

我看过这个程序输出超过10亿个项目(它运行得非常快),并且监视我的机器上的内存使用率从未超过0.1%.

作家monad是否已被重写以修复原始问题?我可以指望它将来继续以这种方式工作吗?

注意 - 我知道存在更好的日志记录monad(我在其他地方使用它们)...我想要的用例不是日志记录(但它是类似的)