<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">From: &quot;C. McCann&quot; &lt;<a href="mailto:cam@uptoisomorphism.net">cam@uptoisomorphism.net</a>&gt;<br>

<br>
What sets an iteratee-style design apart from something conventional<br>
based on a State monad is that the iteratee conceals its internal<br>
state completely (in fact, there&#39;s no reason an iteratee even has to<br>
be the &quot;same&quot; function step-to-step, or have a single consistent<br>
&quot;state&quot; type--almost has an existential flavor, really), but is at<br>
another function&#39;s mercy when it comes to actually doing anything.<br>
<br>
All of which doesn&#39;t really shed too much light on the denotation of<br>
these things, I suppose, as there&#39;s barely anything there to talk<br>
about; the iteratee automaton itself is a terribly simple construct,<br>
relying on an underlying monad to perform actions, on an external<br>
&quot;push&quot; data source to recurse, and being given only bite-size chunks<br>
of data at each step. It&#39;s little more than foldl with a &quot;pause&quot;<br>
button attached.<br></blockquote><div><br></div><div>This is how I think of them.  I particularly your description of them as a foldl with a &quot;pause&quot; button.</div><div><br></div><div>Maybe it would be helpful to consider iteratees along with delimited continuations?</div>
<div><br></div><div>John</div></div>