| License | BSD-like (see LICENSE) |
|---|---|
| Maintainer | Brent Yorgey <byorgey@cis.upenn.edu> |
| Stability | experimental |
| Portability | unportable (GHC 7 only) |
| Safe Haskell | None |
| Language | Haskell2010 |
Unbound.LocallyNameless.Fresh
Contents
Description
- class Monad m => Fresh m where
- type FreshM = FreshMT Identity
- runFreshM :: FreshM a -> a
- contFreshM :: FreshM a -> Integer -> a
- newtype FreshMT m a = FreshMT {}
- runFreshMT :: Monad m => FreshMT m a -> m a
- contFreshMT :: Monad m => FreshMT m a -> Integer -> m a
- class Monad m => LFresh m where
- type LFreshM = LFreshMT Identity
- runLFreshM :: LFreshM a -> a
- contLFreshM :: LFreshM a -> Set AnyName -> a
- newtype LFreshMT m a = LFreshMT {
- unLFreshMT :: ReaderT (Set AnyName) m a
- runLFreshMT :: LFreshMT m a -> m a
- contLFreshMT :: LFreshMT m a -> Set AnyName -> m a
The Fresh class
class Monad m => Fresh m where Source
The Fresh type class governs monads which can generate new
globally unique Names based on a given Name.
Methods
fresh :: Name a -> m (Name a) Source
Generate a new globally unique name based on the given one.
Instances
| Fresh m => Fresh (ListT m) Source | |
| Fresh m => Fresh (MaybeT m) Source | |
| Fresh m => Fresh (IdentityT m) Source | |
| Monad m => Fresh (FreshMT m) Source | |
| Fresh m => Fresh (ContT r m) Source | |
| Fresh m => Fresh (ReaderT r m) Source | |
| Fresh m => Fresh (StateT s m) Source | |
| Fresh m => Fresh (StateT s m) Source | |
| Fresh m => Fresh (ExceptT e m) Source | |
| (Monoid w, Fresh m) => Fresh (WriterT w m) Source | |
| (Monoid w, Fresh m) => Fresh (WriterT w m) Source |
contFreshM :: FreshM a -> Integer -> a Source
Run a FreshM computation given a starting index.
The FreshM monad transformer. Keeps track of the lowest index
still globally unused, and increments the index every time it is
asked for a fresh name.
Instances
| MonadTrans FreshMT Source | |
| MonadError e m => MonadError e (FreshMT m) Source | |
| MonadReader r m => MonadReader r (FreshMT m) Source | |
| MonadState s m => MonadState s (FreshMT m) Source | |
| MonadWriter w m => MonadWriter w (FreshMT m) Source | |
| Monad m => Monad (FreshMT m) Source | |
| Functor m => Functor (FreshMT m) Source | |
| MonadFix m => MonadFix (FreshMT m) Source | |
| Monad m => Applicative (FreshMT m) Source | |
| MonadPlus m => Alternative (FreshMT m) Source | |
| MonadPlus m => MonadPlus (FreshMT m) Source | |
| MonadIO m => MonadIO (FreshMT m) Source | |
| MonadCont m => MonadCont (FreshMT m) Source | |
| Monad m => Fresh (FreshMT m) Source |
runFreshMT :: Monad m => FreshMT m a -> m a Source
Run a FreshMT computation (with the global index starting at zero).
contFreshMT :: Monad m => FreshMT m a -> Integer -> m a Source
Run a FreshMT computation given a starting index for fresh name
generation.
The LFresh class
class Monad m => LFresh m where Source
This is the class of monads that support freshness in an (implicit) local scope. Generated names are fresh for the current local scope, not necessarily globally fresh.
Methods
lfresh :: Rep a => Name a -> m (Name a) Source
Pick a new name that is fresh for the current (implicit) scope.
avoid :: [AnyName] -> m a -> m a Source
Avoid the given names when freshening in the subcomputation, that is, add the given names to the in-scope set.
getAvoids :: m (Set AnyName) Source
Get the set of names currently being avoided.
Instances
| LFresh m => LFresh (ListT m) Source | |
| LFresh m => LFresh (MaybeT m) Source | |
| LFresh m => LFresh (IdentityT m) Source | |
| Monad m => LFresh (LFreshMT m) Source | |
| LFresh m => LFresh (ContT r m) Source | |
| LFresh m => LFresh (ReaderT r m) Source | |
| LFresh m => LFresh (StateT s m) Source | |
| LFresh m => LFresh (StateT s m) Source | |
| LFresh m => LFresh (ExceptT e m) Source | |
| (Monoid w, LFresh m) => LFresh (WriterT w m) Source | |
| (Monoid w, LFresh m) => LFresh (WriterT w m) Source |
type LFreshM = LFreshMT Identity Source
A convenient monad which is an instance of LFresh. It keeps
track of a set of names to avoid, and when asked for a fresh one
will choose the first unused numerical name.
runLFreshM :: LFreshM a -> a Source
Run a LFreshM computation in an empty context.
contLFreshM :: LFreshM a -> Set AnyName -> a Source
Run a LFreshM computation given a set of names to avoid.
The LFresh monad transformer. Keeps track of a set of names to avoid, and when asked for a fresh one will choose the first numeric prefix of the given name which is currently unused.
Constructors
| LFreshMT | |
Fields
| |
Instances
| MonadTrans LFreshMT Source | |
| MonadError e m => MonadError e (LFreshMT m) Source | |
| MonadReader r m => MonadReader r (LFreshMT m) Source | |
| MonadState s m => MonadState s (LFreshMT m) Source | |
| MonadWriter w m => MonadWriter w (LFreshMT m) Source | |
| Monad m => Monad (LFreshMT m) Source | |
| Functor m => Functor (LFreshMT m) Source | |
| MonadFix m => MonadFix (LFreshMT m) Source | |
| Applicative m => Applicative (LFreshMT m) Source | |
| Alternative m => Alternative (LFreshMT m) Source | |
| MonadPlus m => MonadPlus (LFreshMT m) Source | |
| MonadIO m => MonadIO (LFreshMT m) Source | |
| MonadCont m => MonadCont (LFreshMT m) Source | |
| Monad m => LFresh (LFreshMT m) Source |
runLFreshMT :: LFreshMT m a -> m a Source
Run an LFreshMT computation in an empty context.