batching can be used when the Semigroup used to aggregate effects turns them into one effect returning a list of values.
create an Optimisable[T] given a Semigroup for T[_].
create an Optimisable[T] given a Semigroup for T[_].
The Semigroup helps us reduce all the effects to one. That effect returns a value X which you must be able to map back to the list of values which would be created without optimisation