Copyright | (C) 2011-2013 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | provisional |
Portability | portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
A fast unique identifier supply with local pooling and replay support.
One often has a desire to generate a bunch of integer identifiers within a single process that are unique within that process. You could use UUIDs, but they can be expensive to generate; you don't want to have your threads contending for a single external counter if the identifier is not going to be used outside the process.
concurrent-supply
builds a tree-like structure which can be split; you
can make smaller unique supplies and then you allocate from your supplies
locally. Internally it pulls from a unique supply one block at a time as
you walk into parts of the tree that haven't been explored.
Documentation
A user managed globally unique variable supply.
Variables
Grab a new supply. Any two supplies obtained with newSupply are guaranteed to return disjoint sets of identifiers. Replaying the same sequence of operations on the same Supply will yield the same results.
splitSupply :: Supply -> (Supply, Supply) Source
Split a supply into two supplies that will return disjoint identifiers
Unboxed API
splitSupply# :: Supply -> (#Supply, Supply#) Source
An unboxed version of splitSupply