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 <[EMAIL PROTECTED]> 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 > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe