C++11 - Monoid, Functor, Applicative Functor and Monad
How CPP express Monoid, Functor, Applicative Functor and Monad.
The below documentation shows a good explanation.
https://github.com/boostcon/cppnow_presentations_2016/blob/master/00_tuesday/monoids_monads_and_applicative_functors_repeated_software_patterns.pdf