On Tue, Aug 10, 2010 at 2:40 PM, Bill Atkins <batkin...@gmail.com> wrote: > They're not really statements, they're just named expressions and are still > subject to lazy evaluation. > > In: > > let x = putStrLn "Name" >> getLine > putStrLn "Welcome" > x
Yes, 'putStrLn "name" >> getLine' is an expression. However, the whole line 'let x = putStrLn "Name" >> getLine' inside the do-block is an statement. Althought the word 'let' is used in both cases, they are defined in different places of the grammar (see the links of my previous mail). So when you write do ... let ... -- stmt ... you are using a let statement. You can use a let expression in a do-block as well: do ... let ... in ... -- expr ... Note, however, that you must indent the 'in' part, as you would need to indent an if expression inside a do-block. do ... do {... let ... -- expr gets parsed as ;let ... -- stmt in ... -- ;in ... -- ??? ... ;...} Cheers, -- Felipe. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe