I would rename `fromSemigroup` to `scanSemigroup`, since it emits the intermediate values. You can introduce `process1.reduceSemigroup` (which just emits the final result) and `process1.fold1Semigroup` (an alias for `reduceSemigroup`).