It's an outstandingly well-written introduction, but it only goes so far; a more formal treatment (an inevitably longer one, off topic in a discussion of I/O) would be needed to understand what, exactly, can be done with monads and how they differ from other types.
This post is really nice, but the author doesn't actually explain 'monads.' He does give a good explanation of the IO type in Haskell and the various combinators offered (including the monadic ones).
Certainly not what I set out to achieve, but I am very chuffed to hear that. Thank you :-)