If there exists an implicit AdditiveSemigroup[A], this returns a
Semigroup[A] using plus for op.
If there exists an implicit AdditiveSemigroup[A], this returns a
Semigroup[A] using plus for op.
If there exists an implicit MultiplicativeSemigroup[A], this returns a
Semigroup[A] using times for op.
If there exists an implicit MultiplicativeSemigroup[A], this returns a
Semigroup[A] using times for op.