see comment here:
#739 (comment)
reversing the order of semigroup preserves it being a semigroup, as does putting a constant element between every pair. This could be a combinator on semigroup that we could propagate up to other Semigroup related abstractions, e.g. Aggregator, Fold, Scan.