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.<p>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.<p>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.
Another excellent introduction to monads for experienced imperative programmers, particularly those familiar with C#, is here:<p><a href="http://blogs.msdn.com/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx" rel="nofollow">http://blogs.msdn.com/wesdyer/archive/2008/01/11/the-marvels...</a>
Here is my favorite monad tutorial: <a href="http://www.valuedlessons.com/2008/01/monads-in-python-with-nice-syntax.html" rel="nofollow">http://www.valuedlessons.com/2008/01/monads-in-python-with-n...</a> . 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.<p>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:<p><pre><code> with SomeMonad:
do stuff</code></pre>