UniqSupply

ghc-7.10.2: The GHC API

Safe Haskell | None
Language | Haskell2010

UniqSupply

Contents

- Main data type
  - Operations on supplies
- Unique supply monad and its abstraction
  - Operations on the monad

Synopsis

- data UniqSupply
- uniqFromSupply :: UniqSupply -> Unique
- uniqsFromSupply :: UniqSupply -> [Unique]
- takeUniqFromSupply :: UniqSupply -> (Unique, UniqSupply)
- 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]

# 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 -> Unique Source

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 UniqSupply Source

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 `Unique`s

Instances

Monad UniqSM |
Functor UniqSM |
MonadFix UniqSM |
Applicative UniqSM |
MonadUnique UniqSM |

class Monad m => MonadUnique m where Source

A monad for generating unique identifiers

Minimal complete definition

getUniqueSupplyM

Methods

getUniqueSupplyM :: m UniqSupply Source

Get a new UniqueSupply

getUniqueM :: m Unique Source

Get a new unique identifier

getUniquesM :: m [Unique] Source

Get an infinite list of new unique identifiers

Instances

MonadUnique UniqSM |
MonadUnique CoreM |
MonadUnique SimplM |
MonadUnique TcS |

## Operations on the monad

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

Run the `UniqSM` action, returning the final `UniqSupply`

initUs_ :: UniqSupply -> UniqSM a -> a Source

Run the `UniqSM` action, discarding the final `UniqSupply`

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

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