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