And this is because the implementation of IO is *specifically* crafted to guarantee this ordering. It is not a property of monads in general, or do syntax in general.

Yes, this is an important point.  My "as you would expect" was pointed at the IO part of Jon's example, not the monad part :D. Thanks for clarifying.