added Semigroup, Monoid, Group and AbelianGroup