> The default basis library does not attempt to segregate effects into a monad, but it is perfectly straightforward to do this yourself, by providing your own layer over the standard basis<p>This comment is somewhat silly. The whole notion of segregating effects is about what a programmer <i>cannot</i> do, and not about what they can.<p>In ML, maybe <i>you</i> can segregate effects, but it is of limited value, as all of the code you use <i>might</i> be hiding procedural effects behind the seemingly innocent types.<p>In Haskell, when I read an API, I <i>know</i> no effects lurk behind the pure type signatures.
You could analogously explain how of course Lisp has types, you just implement Hindley-Milner and slot it in in front of the standard library. Only, if the author wrote <i>that</i>, I'd think I was hallucinating.
Also of note, a syntax extension for OCaml adding do-notation to the language: <a href="http://www.cas.mcmaster.ca/~carette/pa_monad/" rel="nofollow">http://www.cas.mcmaster.ca/~carette/pa_monad/</a>