<blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">I have omitted the chunking [Char] because I don't like it; invariance
with respect to the chunk sizes is something that should be left to the
iteratee abstraction.<br>
</blockquote>
<br>
I have this same reservation about iteratees. And related one for
enumerators and enumeratees. Assuming my sense of their intended
meanings is on track, they allow lots of well-typed but bogus values.<br><br>Defining and adhering to a precise denotational model would eliminate all of these abstraction leaks, as Luke Palmer alludes to in <a href="http://lukepalmer.wordpress.com/2008/07/18/semantic-design/">http://lukepalmer.wordpress.com/2008/07/18/semantic-design/</a> .<br>
<br>
- Conal<br><br><div class="gmail_quote">On Mon, Aug 23, 2010 at 4:06 PM, Heinrich Apfelmus <span dir="ltr"><<a href="mailto:apfelmus@quantentunnel.de">apfelmus@quantentunnel.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">Conal Elliott wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
For anyone interested in iteratees (etc) and not yet on the iteratees<br>
mailing list.<br>
<br>
I'm asking about what iteratees *mean* (denote), independent of the various<br>
implementations. My original note (also at the end below):<br>
</blockquote>
<br></div>
In my world view, iteratees are just a monad M with a single operation<br>
<br>
symbol :: M Char<br>
<br>
that reads the next symbol from an input stream. In other words, they're a very simple parser monad. The emphasis is not on parsing, but on the fact that one and the same monadic value can be run on different streams<br>
<br>
runHandle :: M a -> Handle -> IO a<br>
runString :: M a -> String -> a<br>
runByteString :: M a -> ByteString -> a<br>
<br>
The monad M may also include convenience like exceptions and liftIO .<br>
<br>
I have omitted the chunking [Char] because I don't like it; invariance with respect to the chunk sizes is something that should be left to the iteratee abstraction.<br>
<br>
<br>
Regards,<br>
Heinrich Apfelmus<br><font color="#888888">
<br>
--<br>
<a href="http://apfelmus.nfshost.com" target="_blank">http://apfelmus.nfshost.com</a><br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</font></blockquote></div><br>