目前至少有三个iteratee库:
我认为enumerator库是当前首选的库,因为它更简单。如果您在意,这也是我用于自己项目的库。另外两个库更灵活,在某些情况下可能更快,但它们也更加复杂。如果您想学习iteratees,建议从enumerator开始。它是Oleg原始想法最直接的实现。
如果您有特定的用例并需要使用标准iteratee方法的许多功能,则可能需要考虑使用iteratee包。在更复杂的方案中,您可能还需要尝试iterIO包,它具有略微不同且更灵活的概念。特别是iteratees可以与enumerator通信,而这在其他两个包中是不可能的。
如果所有三个库都不够灵活,则可能需要使用monad-coroutine包自己编写coroutines。Iteratees和enumerators是一种特殊类型的协程,可以以特定的方式组合。 monad-coroutine包提供了一般类型,并允许您使用自己的交互概念。
iteratee
迭代器也可以与枚举器通信。例如,这就是seek
实现的方式。尽管不如iterIO
机制那样复杂。 - John L