| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
GHC.Types.Unique.Supply
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 :: Type -> Type) 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 Uniques
Instances
| MonadFail UniqSM Source # | |
| MonadFix UniqSM Source # | |
| Applicative UniqSM Source # | |
| Functor UniqSM Source # | |
| Monad UniqSM Source # | |
| MonadUnique UniqSM Source # | |
Defined in GHC.Types.Unique.Supply Methods getUniqueSupplyM :: UniqSM UniqSupply Source # getUniqueM :: UniqSM Unique Source # getUniquesM :: UniqSM [Unique] Source # | |
class Monad m => MonadUnique (m :: Type -> Type) where Source #
A monad for generating unique identifiers
Minimal complete definition
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
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