More general approach to commutativity.
Use definition_for_constructor.