@article{Gibbons&Oliveira2008:Essence,
  abstract = "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.",
  author = "Jeremy Gibbons and Bruno C\'esar dos Santos Oliveira",
  journal = "Journal of Functional Programming",
  note = "Revised version of \cite{Gibbons&Oliveira2006:Essence}",
  title = "The Essence of the Iterator Pattern",
  url = "http://www.comlab.ox.ac.uk/jeremy.gibbons/publications/iterator.pdf",
  year = "2008",
}

