hmmm, this code is not thread safe. I'm assuming single threading on this as this is to wrap monoids in the context they are used. They can be wrapped once per thread for example.
atomic longs would add significant overhead, right?