In addition to this, another great Haskell+monads learning source is Real World Haskell, whose exercises will have you implement your own monads without telling you, and then reveal the surprise later.
Well, it would have been a surprise, but I just spoiled it. Anyway, get reading :)
This is the explanation of Monads that made it click for me.
I actually had déja vu because I had written code very much like this before in Haskell. It got ugly real quick, and I remember thinking 'there has to be a better way of doing this'. Turns out I was right.
The guy who wrote the Typeclassopedia (Brent Yorgey) is coming to speak to my local functional languages group up on campus tomorrow. In the process of googling him, I came across both the Typeclassopedia and this article, and both were excellent.
This tutorial was just one of the those "aha!" moments in my life, and I wanted to share.
Here is my favorite monad tutorial: http://www.valuedlessons.com/2008/01/monads-in-python-with-n... . The reason I like it is because it uses Python rather than Haskell while pointing out that you can build monads in any language that supports objects or closures.
Actually, now that I think about it, it seems to me that pythonic monads should really be context managers, so they can be used like:
Well, it would have been a surprise, but I just spoiled it. Anyway, get reading :)