Post-facto extensions

We need a mechanism to enhance a given type. For instance, The solution is to be able
  1. to define first the set of non-negative integers without viewing it as a MONOID,
  2. then to define the interface MONOID
  3. and finally to enhance the concrete class of non-negative integers by adding to it the property of being a MONOID.

Marc Moreno Maza