Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data UniqSupply
- uniqFromSupply :: UniqSupply -> Unique
- uniqsFromSupply :: UniqSupply -> [Unique]
- takeUniqFromSupply :: UniqSupply -> (Unique, UniqSupply)
- mkSplitUniqSupply :: Char -> IO UniqSupply
- splitUniqSupply :: UniqSupply -> (UniqSupply, UniqSupply)
- listSplitUniqSupply :: UniqSupply -> [UniqSupply]
- splitUniqSupply3 :: UniqSupply -> (UniqSupply, UniqSupply, UniqSupply)
- splitUniqSupply4 :: UniqSupply -> (UniqSupply, UniqSupply, UniqSupply, UniqSupply)
- data UniqSM result
- class Monad m => MonadUnique m where
- getUniqueSupplyM :: m UniqSupply
- getUniqueM :: m Unique
- getUniquesM :: m [Unique]
- liftUs :: MonadUnique m => UniqSM a -> m a
- 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]
- getUniqueSupplyM3 :: MonadUnique m => m (UniqSupply, UniqSupply, UniqSupply)
- 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
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
splitUniqSupply3 :: UniqSupply -> (UniqSupply, UniqSupply, UniqSupply) Source #
Build three UniqSupply
from a single one,
each of which can supply its own unique
splitUniqSupply4 :: UniqSupply -> (UniqSupply, UniqSupply, UniqSupply, UniqSupply) Source #
Build four UniqSupply
from a single one,
each of which can supply its own unique
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 UniqSM # | |
Defined in UniqSupply | |
MonadUnique CoreM # | |
Defined in CoreMonad | |
MonadUnique LiftM # | |
Defined in StgLiftLams.LiftM | |
MonadUnique LlvmM # | |
Defined in LlvmCodeGen.Base | |
MonadUnique FCode # | |
Defined in StgCmmMonad | |
MonadUnique CmmParse # | |
Defined in StgCmmExtCode | |
MonadUnique SimplM # | |
Defined in SimplMonad | |
MonadUnique TcS # | |
Defined in TcSMonad getUniqueSupplyM :: TcS UniqSupply Source # getUniqueM :: TcS Unique Source # getUniquesM :: TcS [Unique] Source # | |
MonadUnique NatM # | |
Defined in NCGMonad getUniqueSupplyM :: NatM UniqSupply Source # getUniqueM :: NatM Unique Source # getUniquesM :: NatM [Unique] Source # | |
MonadUnique (IOEnv (Env gbl lcl)) # | |
Defined in TcRnMonad getUniqueSupplyM :: IOEnv (Env gbl lcl) UniqSupply Source # |
liftUs :: MonadUnique m => UniqSM a -> m a 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
getUniqueSupplyM3 :: MonadUnique m => m (UniqSupply, UniqSupply, UniqSupply) Source #