Summary: | The Iterator pattern gives a clean interface for element-by-element access to a collection. Imperative iterations using the pattern have two simultaneous aspects: <em>mapping</em> and <em>accumulating</em>. Various existing functional iterations model one or other of these, but not both simultaneously. We argue that McBride and Paterson's <em>applicative functors</em>, and in particular the corresponding <em>traverse</em> operator, do exactly this, and therefore capture the essence of the Iterator pattern. We present some axioms for traversal, and illustrate with a simple example, the <em>wordcount</em> problem.
|