Trait Semigroup
algebra
pub trait Semigroup { fn op(_: Self, _: Self) -> Self; }
fn op(_: Self, _: Self) -> Self