pub trait Monoid { type T; // Required methods fn op(&self, l: Self::T, r: Self::T) -> Self::T; fn e(&self) -> Self::T; }