Copyright | (c) 2010 Simon Meier |
---|---|
License | GPL v3 (see LICENSE) |
Maintainer | Simon Meier <iridcode@gmail.com> |
Portability | GHC only |
Safe Haskell | None |
Language | Haskell98 |
Control.Monad.Trans.FastFresh
Description
A monad transformer for passing a fast fresh name supply through a
computation. It uses an Integer
counter to determine the next free name.
Modeled after the mtl-2.0 library.
- type Fresh = FreshT Identity
- runFresh :: Fresh a -> FreshState -> (a, FreshState)
- evalFresh :: Fresh a -> FreshState -> a
- execFresh :: Fresh a -> FreshState -> FreshState
- newtype FreshT m a = FreshT {
- unFreshT :: StateT FreshState m a
- freshT :: (FreshState -> m (a, FreshState)) -> FreshT m a
- runFreshT :: FreshT m a -> FreshState -> m (a, FreshState)
- evalFreshT :: Monad m => FreshT m a -> FreshState -> m a
- execFreshT :: Monad m => FreshT m a -> FreshState -> m FreshState
- type FreshState = Integer
- nothingUsed :: FreshState
- freshIdents :: Monad m => Integer -> FreshT m Integer
- scopeFreshness :: Monad m => FreshT m a -> FreshT m a
The Fresh monad
runFresh :: Fresh a -> FreshState -> (a, FreshState) #
Run a computation with a fresh name supply.
evalFresh :: Fresh a -> FreshState -> a #
Evaluate a computation with a fresh name supply.
execFresh :: Fresh a -> FreshState -> FreshState #
Execute a computation with a fresh name supply.
The FreshT monad transformer
A computation that can generate fresh variables from name hints.
Constructors
FreshT | |
Fields
|
Instances
MonadTrans FreshT # | |
MonadBind k v m => MonadBind k v (FreshT m) # | |
MonadError e m => MonadError e (FreshT m) # | |
MonadReader r m => MonadReader r (FreshT m) # | |
MonadState s m => MonadState s (FreshT m) # | |
Monad m => Monad (FreshT m) # | |
Functor m => Functor (FreshT m) # | |
Monad m => Applicative (FreshT m) # | |
MonadPlus m => Alternative (FreshT m) # | |
MonadPlus m => MonadPlus (FreshT m) # | |
Monad m => MonadFresh (FreshT m) # | |
MonadDisj m => MonadDisj (FreshT m) # | |
freshT :: (FreshState -> m (a, FreshState)) -> FreshT m a #
Construct a FreshT
action from a FreshState
modification.
runFreshT :: FreshT m a -> FreshState -> m (a, FreshState) #
Run a computation with a fresh name supply.
evalFreshT :: Monad m => FreshT m a -> FreshState -> m a #
Evaluate a computation with a fresh name supply.
execFreshT :: Monad m => FreshT m a -> FreshState -> m FreshState #
Execute a computation with a fresh name supply.
Fresh name generation
type FreshState = Integer #
The state of the name supply: the first unused sequence number of every name.
The empty fresh state.
Arguments
:: Monad m | |
=> Integer | number of desired identifiers |
-> FreshT m Integer | The first fresh identifier. |
Get k
fresh identifiers.
scopeFreshness :: Monad m => FreshT m a -> FreshT m a #
Restrict the scope of the freshness requests.