
--- Wolfgang Jeltsch
I think Phil Wadler said it best when he said that a monad is a *computation*.
To be honest, I'm still struggling with the monad concept myself. Oh sure, I can read the definition and it makes sense. But I'm still missing that "aha!" moment when it all comes together.
No, a value of type IO <something> is a computation. The type IO plus (>>=) plus return is a monad. So is [] plus concatMap plus \x -> [x].
This may be totally off-base, but when I read this, it occured to me that all I/O is basically a computation made to appear as if it is something your program "does". You (or, rather the processor) don't execute instructions to write "Hello" in same way as, say, adding 2 and 2. Rather, you add writing this string to a "to do" list and wait for a driver to respond to an interrupt, pick up the request(s), and carry it (them) out when control passes back the kernel.
===
Gregory Woodhouse