optimisations to newUnique
It turned out that newUnique was wasting one node of the splittable uniq supply per invocation: it took the current supply, split it, used the unique from one half and stored the other half in the monad. In other words, the unique in the supply stored in the monad was never used. This optimisation fixes that and adds a bit of strictness, which together lead to small reduction in allocations by the compiler, and possibly an improvement in residency (hard to tell for sure when GCs move around).
Showing with 15 additions and 4 deletions