ord-stref-0.1.0.0: Orderable STRefs and unique symbol generation in ST.

Copyright(c) 2019 L.S.Leary
LicenseBSD3
Safe HaskellNone
LanguageHaskell2010

Control.Monad.Trans.UGenT

Description

A Monad transformer for unique symbol generation.

Synopsis

Documentation

data UGenT m a Source #

Transform a Monad with unique symbol generation.

Instances
MonadTrans UGenT Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

lift :: Monad m => m a -> UGenT m a #

Monad m => Monad (UGenT m) Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

(>>=) :: UGenT m a -> (a -> UGenT m b) -> UGenT m b #

(>>) :: UGenT m a -> UGenT m b -> UGenT m b #

return :: a -> UGenT m a #

fail :: String -> UGenT m a #

Functor m => Functor (UGenT m) Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

fmap :: (a -> b) -> UGenT m a -> UGenT m b #

(<$) :: a -> UGenT m b -> UGenT m a #

MonadFix m => MonadFix (UGenT m) Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

mfix :: (a -> UGenT m a) -> UGenT m a #

MonadFail m => MonadFail (UGenT m) Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

fail :: String -> UGenT m a #

Monad m => Applicative (UGenT m) Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

pure :: a -> UGenT m a #

(<*>) :: UGenT m (a -> b) -> UGenT m a -> UGenT m b #

liftA2 :: (a -> b -> c) -> UGenT m a -> UGenT m b -> UGenT m c #

(*>) :: UGenT m a -> UGenT m b -> UGenT m b #

(<*) :: UGenT m a -> UGenT m b -> UGenT m a #

MonadIO m => MonadIO (UGenT m) Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

liftIO :: IO a -> UGenT m a #

MonadPlus m => Alternative (UGenT m) Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

empty :: UGenT m a #

(<|>) :: UGenT m a -> UGenT m a -> UGenT m a #

some :: UGenT m a -> UGenT m [a] #

many :: UGenT m a -> UGenT m [a] #

runUGenT :: Functor m => UGenT m a -> m a Source #

Escape the UGenT Monad transformer, discarding generator state.

runUGen :: UGen a -> a Source #

Perform a computation in the USG Monad UGen.

data Unique Source #

An opaque data type, the complete interface to which consists of Eq, Ord and genUnique.

Instances
Eq Unique Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

Methods

(==) :: Unique -> Unique -> Bool #

(/=) :: Unique -> Unique -> Bool #

Ord Unique Source # 
Instance details

Defined in Control.Monad.Trans.UGenT

genUnique :: Monad m => UGenT m Unique Source #

Generate a new symbol, unique within the current monadic computation.

runUGen $ (/=) <$> genUnique <*> genUnique

The symbol generation is pure:

runUGen genUnique == runUGen genUnique