Learn You a Haskell for Great Good - Monads

When we first talked about functors, we saw that they were a useful concept for values that can be mapped over. Then, we took that concept one step further by introducing applicative functors, which allow us to view values of certain data types as values with contexts and use normal functions on those values while preserving the meaning of those contexts. In this chapter, we'll learn about monads, which are just beefed up applicative functors, much like applicative functors are only beefed up functors.