The MonadWriter class.
Inspired by the paper /Functional Programming with Overloading and
Higher-Order Polymorphism/, Mark P Jones
(http://web.cecs.pdx.edu/~mpj/pubs/springschool.html) Advanced
School of Functional Programming, 1995.
A writer monad parameterized by the type w of output to
accumulate.
The return function produces the output mempty, while
>>= combines the outputs of the subcomputations using
mappend.