Thanks for pointing out this exposition, Oleg.  I had never thought of the connection between monads and Landin's earlier paper.  However, I do remember Appel's CPS book saying something to the effect of lambda being the prototypical let, and this was further described to me by Michael Hicks when he was doing his work on monadic programming for ML: in which ML is "lifted" to the proper monad for the job.

http://research.microsoft.com/apps/pubs/?id=151802

Interesting history however, your pages are quite useful!


Kris

On Jul 22, 2013 8:16 PM, <oleg@okmij.org> wrote:

> The purest way to view it is that after desugaring, sequenced
> statements turn into lambdas, which turn into (morally) binds from the
> IO monad.  The observation is that when writing in ML, you are
> implicitly writing in the IO monad.

Peter Landin has described this process already in 1965. See the exact
quotation from his paper (the ()-passing trick) in
        http://okmij.org/ftp/Computation/IO-monad-history.html
(as well a few comments). That Peter Landin's paper also described
State and Writer monads, streams and delayed evaluation and even
stream fusion.