Possible to do compile time checks for monoid instances.
Various concept instances for std::shared_ptr.