- data UniqSupply
- uniqFromSupply :: UniqSupply -> Unique
- uniqsFromSupply :: UniqSupply -> [Unique]
- mkSplitUniqSupply :: Char -> IO UniqSupply
- splitUniqSupply :: UniqSupply -> (UniqSupply, UniqSupply)
- listSplitUniqSupply :: UniqSupply -> [UniqSupply]
- data UniqSM result
- class Monad m => MonadUnique m where
- getUniqueSupplyM :: m UniqSupply
- getUniqueM :: m Unique
- getUniquesM :: m [Unique]

- initUs :: UniqSupply -> UniqSM a -> (a, UniqSupply)
- initUs_ :: UniqSupply -> UniqSM a -> a
- lazyThenUs :: UniqSM a -> (a -> UniqSM b) -> UniqSM b
- lazyMapUs :: (a -> UniqSM b) -> [a] -> UniqSM [b]
- getUniqueUs :: UniqSM Unique
- getUs :: UniqSM UniqSupply
- returnUs :: a -> UniqSM a
- thenUs :: UniqSM a -> (a -> UniqSM b) -> UniqSM b
- mapUs :: (a -> UniqSM b) -> [a] -> UniqSM [b]

# Main data type

data UniqSupply Source

A value of type `UniqSupply`

is unique, and it can
supply *one* distinct `Unique`

. Also, from the supply, one can
also manufacture an arbitrary number of further `UniqueSupply`

values,
which will be distinct from the first and from all others.

## Operations on supplies

uniqFromSupply :: UniqSupply -> UniqueSource

Obtain the `Unique`

from this particular `UniqSupply`

uniqsFromSupply :: UniqSupply -> [Unique]Source

Obtain an infinite list of `Unique`

that can be generated by constant splitting of the supply

mkSplitUniqSupply :: Char -> IO UniqSupplySource

Create a unique supply out of thin air. The character given must be distinct from those of all calls to this function in the compiler for the values generated to be truly unique.

splitUniqSupply :: UniqSupply -> (UniqSupply, UniqSupply)Source

Build two `UniqSupply`

from a single one, each of which
can supply its own `Unique`

.

listSplitUniqSupply :: UniqSupply -> [UniqSupply]Source

Create an infinite list of `UniqSupply`

from a single one

# Unique supply monad and its abstraction

A monad which just gives the ability to obtain `Unique`

s

class Monad m => MonadUnique m whereSource

A monad for generating unique identifiers

getUniqueSupplyM :: m UniqSupplySource

Get a new UniqueSupply

getUniqueM :: m UniqueSource

Get a new unique identifier

getUniquesM :: m [Unique]Source

Get an infinite list of new unique identifiers

MonadUnique UniqSM | |

MonadUnique FuelMonad | |

MonadUnique CoreM | |

MonadUnique SimplM | |

MonadUnique (IOEnv (Env gbl lcl)) | |

MonadUnique (DFM' FuelMonad f) |

## Operations on the monad

initUs :: UniqSupply -> UniqSM a -> (a, UniqSupply)Source

Run the `UniqSM`

action, returning the final `UniqSupply`

initUs_ :: UniqSupply -> UniqSM a -> aSource

Run the `UniqSM`

action, discarding the final `UniqSupply`

lazyThenUs :: UniqSM a -> (a -> UniqSM b) -> UniqSM bSource