UniqSupply

ghc-8.10.1: 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
- Set supply strategy

Synopsis

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

# Main data type

data UniqSupply Source #

Unique Supply

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

uniqFromMask :: Char -> IO Unique Source #

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

Instances details

Monad UniqSM # |
Instance details Defined in UniqSupply Methods (>>=) :: UniqSM a -> (a -> UniqSM b) -> UniqSM b Source # (>>) :: UniqSM a -> UniqSM b -> UniqSM b Source # return :: a -> UniqSM a Source #
Functor UniqSM # |
Instance details Defined in UniqSupply Methods fmap :: (a -> b) -> UniqSM a -> UniqSM b Source # (<$) :: a -> UniqSM b -> UniqSM a Source #
MonadFix UniqSM # |
Instance details Defined in UniqSupply Methods mfix :: (a -> UniqSM a) -> UniqSM a Source #
MonadFail UniqSM # |
Instance details Defined in UniqSupply Methods fail :: String -> UniqSM a Source #
Applicative UniqSM # |
Instance details Defined in UniqSupply Methods pure :: a -> UniqSM a Source # (<*>) :: UniqSM (a -> b) -> UniqSM a -> UniqSM b Source # liftA2 :: (a -> b -> c) -> UniqSM a -> UniqSM b -> UniqSM c Source # (*>) :: UniqSM a -> UniqSM b -> UniqSM b Source # (<*) :: UniqSM a -> UniqSM b -> UniqSM a Source #
MonadUnique UniqSM # |
Instance details Defined in UniqSupply Methods getUniqueSupplyM :: UniqSM UniqSupply Source # getUniqueM :: UniqSM Unique Source # getUniquesM :: UniqSM [Unique] Source #

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

Instances details

MonadUnique UniqSM # |
Instance details Defined in UniqSupply Methods getUniqueSupplyM :: UniqSM UniqSupply Source # getUniqueM :: UniqSM Unique Source # getUniquesM :: UniqSM [Unique] Source #
MonadUnique CoreM # |
Instance details Defined in CoreMonad Methods getUniqueSupplyM :: CoreM UniqSupply Source # getUniqueM :: CoreM Unique Source # getUniquesM :: CoreM [Unique] Source #
MonadUnique LiftM # |
Instance details Defined in StgLiftLams.LiftM Methods getUniqueSupplyM :: LiftM UniqSupply Source # getUniqueM :: LiftM Unique Source # getUniquesM :: LiftM [Unique] Source #
MonadUnique LlvmM # |
Instance details Defined in LlvmCodeGen.Base Methods getUniqueSupplyM :: LlvmM UniqSupply Source # getUniqueM :: LlvmM Unique Source # getUniquesM :: LlvmM [Unique] Source #
MonadUnique FCode # |
Instance details Defined in GHC.StgToCmm.Monad Methods getUniqueSupplyM :: FCode UniqSupply Source # getUniqueM :: FCode Unique Source # getUniquesM :: FCode [Unique] Source #
MonadUnique CmmParse # |
Instance details Defined in GHC.StgToCmm.ExtCode Methods getUniqueSupplyM :: CmmParse UniqSupply Source # getUniqueM :: CmmParse Unique Source # getUniquesM :: CmmParse [Unique] Source #
MonadUnique SimplM # |
Instance details Defined in SimplMonad Methods getUniqueSupplyM :: SimplM UniqSupply Source # getUniqueM :: SimplM Unique Source # getUniquesM :: SimplM [Unique] Source #
MonadUnique TcS # |
Instance details Defined in TcSMonad Methods getUniqueSupplyM :: TcS UniqSupply Source # getUniqueM :: TcS Unique Source # getUniquesM :: TcS [Unique] Source #
MonadUnique NatM # |
Instance details Defined in NCGMonad Methods getUniqueSupplyM :: NatM UniqSupply Source # getUniqueM :: NatM Unique Source # getUniquesM :: NatM [Unique] Source #
MonadUnique (IOEnv (Env gbl lcl)) # |
Instance details Defined in TcRnMonad Methods getUniqueSupplyM :: IOEnv (Env gbl lcl) UniqSupply Source # getUniqueM :: IOEnv (Env gbl lcl) Unique Source # getUniquesM :: IOEnv (Env gbl lcl) [Unique] Source #

## 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`

# Set supply strategy

initUniqSupply :: Int -> Int -> IO () Source #