一种依次发出 β 类型值的迭代器。它可以是有限的,也可以是无限的。
迭代器框架的更全面概览见根模块 Std.Data.Iterators。
如何迭代常见数据结构见 Std.Data.Iterators.Producers。按照约定,与对象关联的单子式迭代器可通过点记法取得。例如,List.iterM IO 会在单子 IO 中创建一个遍历列表的迭代器。
迭代器的使用方式见 Init.Data.Iterators.Consumers。例如,it.toList 会把迭代器 it 转换为列表;若有该迭代器有限的证明,it.ensureTermination.toList 可保证此操作终止。也始终可以用 it.step 手动迭代,并以终止度量 it.finitelyManySteps 和 it.finitelyManySkips 证明终止。
在单子中运行的迭代器见 IterM。
在内部,Iter β 包装一个包含状态信息的 α 类型元素。类型 α 通过类型类机制决定迭代器的实现;实际实现迭代器的类型类是 Iterator α m β。
使用组合子时,α 可能变得非常复杂。它是 α 的隐式参数,因此漂亮打印器默认不会打印这个庞大类型。若声明返回迭代器,以下写法不可行:
def x : Iter Nat := [1, 2, 3].iter
应当完全省略声明的类型:
def x := [1, 2, 3].iter -- 若要确保 `x` 是发出 `Nat` 的迭代器 def x := ([1, 2, 3].iter : Iter Nat)
构造子
Std.Iter.mk.{w}
字段
internalState : α
迭代器的内部实现细节。