Supply package:streams
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.