
There are a few rules by which do-syntax is translated into a chain of
bind (>>=) operations:
They are, (approximately):
do { x } = x
do { x ; <stmts> } = x >> do { <stmts> }
do { v <- x ; <stmts> } = x >>= \v -> do { <stmts> }
do { let { <decls> } ; <stmts> } = let <decls> in do { <stmts> }
The meaning of >>= depends on which monad you're using.
I've written a high-level overview about monads, including a section
about do-notation here:
http://haskell.org/haskellwiki/Monads_as_computation
I've also written
http://haskell.org/haskellwiki/Monads_as_containers
which I've found is an approach which is often fairly useful for those
starting out.
If you're just interested in how IO is handled in Haskell, I can offer
a quick blurb about how we think about that here, which I recommend
regardless since it's short:
http://haskell.org/haskellwiki/Introduction_to_IO
- Cale
On 03/12/2007, PR Stanley
Hi I've probably asked about the do construct, if that's the right label. Unfortunately I'm still not quite sure of its role and more specifically its syntax. Something to do with generators perhaps? A description plus some examples would be most gratefully received. Thanks, Paul
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe