What I Wish I Knew When Learning Haskell
I disagree completely with his analysis on monads.If you just present the abstract structure, you cannot understand why you even want (for example) the do notation as a language-level concept. I think this is more of a case of bad examples than anything.Trying to represnent monads via analogy works badly too though, because monads as used in haskell are more about programming pragmatics than modelling real world objects.The way to explain it should be :- Show real code- Explain why we use this structure to write our code .I think a good explanation is to ...in Jquery you do things like chaining to build things.$('selector').css('color','red').filter(someFilter).css('color','blue')Chaining APIs are useful because you're combining computation('chaining'), and you don't want to have to carry around a value everywhere. You want to do the same thing in Haskell obviously.Haskell doesn't have dot notation, so you can't do this style exactly. First idea would be to do something likelet x=jQuery document selector in 
let y=css x 'color' 'red' in 
let z=filter y someFilter in
...This is a pain, especially considering that the 'chaining' here is mechanically obviouslet [n+1] = f [n] [whatever] in 
let [n+2] = g [n+1] ....So monads, in the most pragmatic sense, allow you to represnt this form of computation. You end up withjQuery 'selector' 
>>= css 'color' 'red'
>>= filter someSelector 
>>= css 'color' blue'You implicitly carry around your computation.)In any case the Maybe monad is the worst example ever, just like how a singleton group is a bad example. Sure it's the 'simplest' , but it's far from the most typical