管道库中关于流和效果的澄清

时间:2014-05-08 09:07:32

标签: haskell haskell-pipes

管道教程在他们的文档中提到了这一点:

  

如果你牺牲了效果,你会获得Haskell的纯粹和懒惰的列表   你可以在恒定空间中使用可组合函数进行变换,但是   没有交错效果。

     

如果你牺牲Streaming,你会得到mapM,   forM和" ListT做错了",它们是可组合且有效的,但是   在整个列表第一次出现之前,不要返回单个结果   处理并加载到内存中。

但是Streaming是否意味着交织效应?当你是Streaming时,你实际上是按块来消耗大块的。那么,虽然按块消耗块并不是交错的效果?

1 个答案:

答案 0 :(得分:2)

Streaming确实意味着交错效果。你引用的文字没有另外说明。

解释管道文档:

  • 如果你没有效果,那么你只剩下懒惰的数据结构。它们组合得很好,但你不能做IO(除了我们试图避免的懒惰IO)。
  • 如果你确实有效果但没有流,那么你可以做IO但直到结束才会得到结果。