If O is a Monoid, then we can always return zero. We only need Option[O] if O is only a semigroup. I'm not sure which use case should optimized.