枚举器与迭代包的比较

hvr*_*hvr 20 haskell loops enumerator

目前,有两种流行的选择实现了iteratee模式:

他们的相对好处是什么?是一个比另一个好,还是取决于用例(如果是的话,决定使用哪个标准的标准是什么)?

小智 21

至少有三个iteratee库:

  • 枚举
  • iteratee
  • iterIO

我相信枚举器库是目前首选的,因为它简单.如果你关心的话,它也是我用于我的项目的那个.另外两个软件包更灵活,有时可以更快,但它们也更复杂.如果你想学习迭代,我建议从枚举器开始.这是Oleg最初想法的最直接实现.

如果您有特定的用例并且需要使用标准iteratee方法的许多功能,您可能需要考虑使用iteratee包.在更复杂的场景中,您可能还想尝试iterIO包,它具有略微不同且更灵活的概念.特别是迭代者可以与枚举器通信,这在其他两个包中是不可能的.

如果所有三个软件包都不够灵活,您可能希望使用monad-coroutine软件包自己编写协.Iteratees和枚举器是一种特殊类型的协同程序,可以以某种方式组成.该单子,协同程序包为您提供了一般类型,并允许您使用自己的互动概念.

  • 一个小的nit:`iteratee` iteratees也可以与枚举器通信.例如,这就是`seek`的实现方式.但它并不像`iterIO`机制那么复杂. (3认同)
  • IterIO实际上"更复杂"吗?我认为它的整个目标是通过统一iteratee和枚举器概念来简化. (2认同)