Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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 :: Word -> 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
mkSplitUniqSupply :: Char -> IO UniqSupply Source #
Create a unique supply out of thin air. The "mask" (Char) supplied is purely cosmetic, making it easier to figure out where a Unique was born. See Note [Uniques and masks].
The payload part of the Uniques allocated from this UniqSupply are
guaranteed distinct wrt all other supplies, regardless of their "mask".
This is achieved by allocating the payload part from
a single source of Uniques, namely genSym
, shared across
all UniqSupply's.
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 where Source #
A monad for generating unique identifiers
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 NatM # | |
Defined in GHC.CmmToAsm.Monad getUniqueSupplyM :: NatM UniqSupply Source # getUniqueM :: NatM Unique Source # getUniquesM :: NatM [Unique] Source # | |
MonadUnique LlvmM # | |
Defined in GHC.CmmToLlvm.Base | |
MonadUnique CoreM # | |
Defined in GHC.Core.Opt.Monad | |
MonadUnique SimplM # | |
Defined in GHC.Core.Opt.Simplify.Monad | |
MonadUnique LiftM # | |
Defined in GHC.Stg.Lift.Monad | |
MonadUnique CmmParse # | |
Defined in GHC.StgToCmm.ExtCode | |
MonadUnique FCode # | |
Defined in GHC.StgToCmm.Monad | |
MonadUnique TcS # | |
Defined in GHC.Tc.Solver.Monad getUniqueSupplyM :: TcS UniqSupply Source # getUniqueM :: TcS Unique Source # getUniquesM :: TcS [Unique] Source # | |
MonadUnique UniqSM # | |
Defined in GHC.Types.Unique.Supply | |
MonadUnique (IOEnv (Env gbl lcl)) # | |
Defined in GHC.Tc.Utils.Monad getUniqueSupplyM :: IOEnv (Env gbl lcl) UniqSupply 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