| do {e ; stmts} = e >> do {stmts} With the risk of being late at this, and with the risk of repeating something that has already been said (because I have been away), I will give my two euro-cents. I remember a discussion at the Haskell mailing list about the possibility of creating a nasty space leak with this translation. After all, there is a difference between: <e1> >> <e2> which, for the default definition of >> expands to an expression which is operationally equivalent to: <e1> >>= let x = <e2> in \_ -> x, and: <e1> >>= \_ -> <e2>. In the first case, x is shared between successive invocations, but in the second case, e2 is recomputed. I remember that the example involved a definition like: f = do ...; print [1..] In the translation in the report, the list [1..] is shared between all invocations of f, whereas the current GHC translation does not. So, changing the translation in GHC might actually introduce a very nasty space leak in existing programs! /Koen. -- Koen Claessen http://www.cs.chalmers.se/~koen Chalmers University, Gothenburg, Sweden.