This extracts is_zero() from Semigroup, which now requires it instead. The reasoning is that while Semigroup<Rhs> can have multiple Rhs implementations, there cannot be multiple is_zero() implementations, and we want to avoid confusion there. In fact, it isn't especially clear what being a zero means for any other Rhs, and we don't really end up using is_zero() in support of semigroup actions as much as once accumulation has been accomplished, determining whether to discard the update or not.
This extracts
is_zero()
fromSemigroup
, which now requires it instead. The reasoning is that whileSemigroup<Rhs>
can have multipleRhs
implementations, there cannot be multipleis_zero()
implementations, and we want to avoid confusion there. In fact, it isn't especially clear what being a zero means for any otherRhs
, and we don't really end up usingis_zero()
in support of semigroup actions as much as once accumulation has been accomplished, determining whether to discard the update or not.