Semigroups in Rust