unbound-generics-0.1: Reimplementation of Unbound using GHC Generics

Stabilityexperimental
MaintainerAleksey Kliger
Safe HaskellNone

Unbound.Generics.LocallyNameless.LFresh

Contents

Description

Local freshness monad.

Synopsis

The LFresh class

class Monad m => LFresh m whereSource

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 :: Typeable a => Name a -> m (Name a)Source

Pick a new name that is fresh for the current (implicit) scope.

avoid :: [AnyName] -> m a -> m aSource

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) 
LFresh m => LFresh (MaybeT m) 
LFresh m => LFresh (IdentityT m) 
Monad m => LFresh (LFreshMT m) 
LFresh m => LFresh (ContT r m) 
LFresh m => LFresh (ReaderT r m) 
LFresh m => LFresh (StateT s m) 
LFresh m => LFresh (StateT s m) 
LFresh m => LFresh (ExceptT e m) 
(Error e, LFresh m) => LFresh (ErrorT e m) 
(Monoid w, LFresh m) => LFresh (WriterT w m) 
(Monoid w, LFresh m) => LFresh (WriterT w m) 

type LFreshM = LFreshMT IdentitySource

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 -> aSource

Run a LFreshM computation in an empty context.

contLFreshM :: LFreshM a -> Set AnyName -> aSource

Run a LFreshM computation given a set of names to avoid.

newtype LFreshMT m a Source

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

unLFreshMT :: ReaderT (Set AnyName) m a
 

runLFreshMT :: LFreshMT m a -> m aSource

Run an LFreshMT computation in an empty context.

contLFreshMT :: LFreshMT m a -> Set AnyName -> m aSource

Run an LFreshMT computation given a set of names to avoid.