That is a pretty good walkthrough of the "harder" parts of functional programming.<p>Although, I always found it telling that the language designers needed the "do" imperative notation for monadic state computations.<p>While the benefits of monadic-state are pretty well known at this point, it does seem interesting that for widespread adoption it has to be "wrapped" in an abstraction more familiar to developers.