[Haskell-cafe] Remember the future

Dan Piponi dpiponi at gmail.com
Sat Aug 18 11:19:49 EDT 2007

On 8/18/07, Andrew Coppin <andrewcoppin at btinternet.com> wrote:

> Surely all this means is that the magical "mdo" keyword makes the
> compiler arbitrarily reorder the expression...?

What mdo actually does is described here:

My last example desugars to:

test = mfix (
    \ ~(x,y,z,v) -> do
        z <- return $ x+y
        print "Hello"
        x <- readLn
        y <- readLn
        v <- return z
        return (x,y,z,v))
    >>= \(x,y,z,v) -> return v

So at core there really is a do-expression that's passing 'return $
x+y' into a print which in turn is passed into the 'readLn's.

More information about the Haskell-Cafe mailing list