The Semiring type class for a given type A combines both a commutative additive Monoid and a multiplicative Monoid. It requires the multiplicative Monoid to distribute over the additive one. The operations of the multiplicative Monoid have been renamed to one and combineMultiplicate for easier use.