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

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

Control.Monad.Trans.FastFresh

Contents

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.

Synopsis

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

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.

freshIdents #

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.