Playing with C++ metaprogramming, and monads.