pub trait Semigroup: Clone { fn mappend(&self, other: &Self) -> Self; }
Semigroup type class
combine 2 of the same type
use funlib::Semigroup; assert_eq!(4i32, 1i32.mappend(&3i32)); assert_eq!(Some(4i32), Some(1i32).mappend(&Some(3i32)));