This library can be used to generate values (for example, new names)
without the need to thread state. This means that functions that
need to generate new values only need a supply object as an argument,
and they do not need to return a new supply object as a result.
This decreases the number of data-dependencies in a program, which
makes it easier to exploit parallelism.

The technique for generating new values is based on the paper
''On Generating Unique Names'' by Lennart Augustsson, Mikael Rittri,
and Dan Synek.