Add Semigroup for Free