ghc-7.2.1: The GHC API

UniqSupply

Contents

Synopsis

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

takeUniqFromSupply :: UniqSupply -> (Unique, UniqSupply)Source

Obtain the Unique from this particular UniqSupply, and a new 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

data UniqSM result Source

A monad which just gives the ability to obtain Uniques

class Monad m => MonadUnique m whereSource

A monad for generating unique identifiers

Methods

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

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

lazyMapUs :: (a -> UniqSM b) -> [a] -> UniqSM [b]Source

Deprecated operations on UniqSM

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

mapUs :: (a -> UniqSM b) -> [a] -> UniqSM [b]Source