tamarin-prover-utils-1.2.2: Utility library for the tamarin prover.

Copyright(c) 2010 2011 Simon Meier
LicenseGPL v3 (see LICENSE)
MaintainerSimon Meier <iridcode@gmail.com>
PortabilityGHC only
Safe HaskellNone
LanguageHaskell98

Control.Monad.Fresh

Contents

Description

Computations that need a fresh name supply.

Synopsis

MonadFresh class

class (Applicative m, Monad m) => MonadFresh m where #

Minimal complete definition

freshIdent, freshIdents, scopeFreshness

Methods

freshIdent :: String -> m Integer #

Get the integer of the next fresh identifier of this name.

freshIdents :: Integer -> m Integer #

Get a number of fresh identifiers. This reserves the required number of identifiers on all names.

scopeFreshness :: m a -> m a #

Scope the freshIdent and freshIdents requests such that these variables are not marked as used once the scope is left.

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 fast FreshT monad transformer

newtype FreshT m a #

A computation that can generate fresh variables from name hints.

Constructors

FreshT 

Fields

Instances

MonadTrans FreshT # 

Methods

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

MonadBind k v m => MonadBind k v (FreshT m) # 
MonadError e m => MonadError e (FreshT m) # 

Methods

throwError :: e -> FreshT m a #

catchError :: FreshT m a -> (e -> FreshT m a) -> FreshT m a #

MonadReader r m => MonadReader r (FreshT m) # 

Methods

ask :: FreshT m r #

local :: (r -> r) -> FreshT m a -> FreshT m a #

reader :: (r -> a) -> FreshT m a #

MonadState s m => MonadState s (FreshT m) # 

Methods

get :: FreshT m s #

put :: s -> FreshT m () #

state :: (s -> (a, s)) -> FreshT m a #

Monad m => Monad (FreshT m) # 

Methods

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

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

return :: a -> FreshT m a #

fail :: String -> FreshT m a #

Functor m => Functor (FreshT m) # 

Methods

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

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

Monad m => Applicative (FreshT m) # 

Methods

pure :: a -> FreshT m a #

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

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

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

MonadPlus m => Alternative (FreshT m) # 

Methods

empty :: FreshT m a #

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

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

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

MonadPlus m => MonadPlus (FreshT m) # 

Methods

mzero :: FreshT m a #

mplus :: FreshT m a -> FreshT m a -> FreshT m a #

Monad m => MonadFresh (FreshT m) # 
MonadDisj m => MonadDisj (FreshT m) # 

Methods

contradictoryBecause :: Maybe String -> FreshT m a #

disjunction :: FreshT m a -> FreshT m a -> FreshT m a #

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.

nothingUsed :: FreshState #

The empty fresh state.