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 <prstanley@ntlworld.com> wrote:
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