HoleId.MakeConstruct a counter for hole id numbers.
The reason this is wrapped in a generative functor is that functor instantiation allows the next function to operate on a private integer reference, that can be made inaccessible outside of this module.