crucible-0.7: Crucible is a library for language-agnostic symbolic simulation
Copyright(c) Galois Inc 2013-2014
LicenseBSD3
MaintainerJoe Hendrix <jhendrix@galois.com>
Stabilityprovisional
Safe HaskellSafe-Inferred
LanguageHaskell2010

Lang.Crucible.Utils.StateContT

Contents

Description

This module defines a monad with continuations and state. By using this instead of a MTL StateT and ContT transformer stack, one can have a continuation that implements MonadCont and MonadState, yet never returns the final state. This also wraps MonadST.

Synopsis

Documentation

newtype StateContT s r m a Source #

A monad transformer that provides MonadCont and MonadState.

Constructors

StateContT 

Fields

Instances

Instances details
MonadReader v m => MonadReader v (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

ask :: StateContT s r m v #

local :: (v -> v) -> StateContT s r m a -> StateContT s r m a #

reader :: (v -> a) -> StateContT s r m a #

MonadState s (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

get :: StateContT s r m s #

put :: s -> StateContT s r m () #

state :: (s -> (a, s)) -> StateContT s r m a #

MonadST s m => MonadST s (StateContT t r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

liftST :: ST s a -> StateContT t r m a #

MonadTrans (StateContT s r) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

lift :: Monad m => m a -> StateContT s r m a #

MonadFail m => MonadFail (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

fail :: String -> StateContT s r m a #

MonadIO m => MonadIO (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

liftIO :: IO a -> StateContT s r m a #

Applicative (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

pure :: a -> StateContT s r m a #

(<*>) :: StateContT s r m (a -> b) -> StateContT s r m a -> StateContT s r m b #

liftA2 :: (a -> b -> c) -> StateContT s r m a -> StateContT s r m b -> StateContT s r m c #

(*>) :: StateContT s r m a -> StateContT s r m b -> StateContT s r m b #

(<*) :: StateContT s r m a -> StateContT s r m b -> StateContT s r m a #

Functor (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

fmap :: (a -> b) -> StateContT s r m a -> StateContT s r m b #

(<$) :: a -> StateContT s r m b -> StateContT s r m a #

Monad (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

(>>=) :: StateContT s r m a -> (a -> StateContT s r m b) -> StateContT s r m b #

(>>) :: StateContT s r m a -> StateContT s r m b -> StateContT s r m b #

return :: a -> StateContT s r m a #

MonadCatch m => MonadCatch (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

catch :: (HasCallStack, Exception e) => StateContT s r m a -> (e -> StateContT s r m a) -> StateContT s r m a #

MonadThrow m => MonadThrow (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

throwM :: (HasCallStack, Exception e) => e -> StateContT s r m a #

MonadCont (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

callCC :: ((a -> StateContT s r m b) -> StateContT s r m a) -> StateContT s r m a #

Re-exports

class Monad m => MonadCont (m :: Type -> Type) where #

Methods

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

callCC (call-with-current-continuation) calls a function with the current continuation as its argument. Provides an escape continuation mechanism for use with Continuation monads. Escape continuations allow to abort the current computation and return a value immediately. They achieve a similar effect to throwError and catchError within an Except monad. Advantage of this function over calling return is that it makes the continuation explicit, allowing more flexibility and better control (see examples in Control.Monad.Cont).

The standard idiom used with callCC is to provide a lambda-expression to name the continuation. Then calling the named continuation anywhere within its scope will escape from the computation, even if it is many layers deep within nested computations.

Instances

Instances details
MonadCont m => MonadCont (Free m) 
Instance details

Defined in Control.Monad.Free

Methods

callCC :: ((a -> Free m b) -> Free m a) -> Free m a #

MonadCont m => MonadCont (MaybeT m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> MaybeT m b) -> MaybeT m a) -> MaybeT m a #

(Functor f, MonadCont m) => MonadCont (FreeT f m) 
Instance details

Defined in Control.Monad.Trans.Free

Methods

callCC :: ((a -> FreeT f m b) -> FreeT f m a) -> FreeT f m a #

(Monoid w, MonadCont m) => MonadCont (AccumT w m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> AccumT w m b) -> AccumT w m a) -> AccumT w m a #

MonadCont m => MonadCont (ExceptT e m)

Since: mtl-2.2

Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> ExceptT e m b) -> ExceptT e m a) -> ExceptT e m a #

MonadCont m => MonadCont (IdentityT m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> IdentityT m b) -> IdentityT m a) -> IdentityT m a #

MonadCont m => MonadCont (ReaderT r m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> ReaderT r m b) -> ReaderT r m a) -> ReaderT r m a #

MonadCont m => MonadCont (StateT s m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> StateT s m b) -> StateT s m a) -> StateT s m a #

MonadCont m => MonadCont (StateT s m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> StateT s m b) -> StateT s m a) -> StateT s m a #

(Monoid w, MonadCont m) => MonadCont (WriterT w m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> WriterT w m b) -> WriterT w m a) -> WriterT w m a #

(Monoid w, MonadCont m) => MonadCont (WriterT w m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> WriterT w m b) -> WriterT w m a) -> WriterT w m a #

(Monoid w, MonadCont m) => MonadCont (WriterT w m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> WriterT w m b) -> WriterT w m a) -> WriterT w m a #

MonadCont (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

callCC :: ((a -> StateContT s r m b) -> StateContT s r m a) -> StateContT s r m a #

MonadCont (ContT r m)

Since: mtl-2.3.1

Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> ContT r m b) -> ContT r m a) -> ContT r m a #

(Monoid w, MonadCont m) => MonadCont (RWST r w s m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> RWST r w s m b) -> RWST r w s m a) -> RWST r w s m a #

(Monoid w, MonadCont m) => MonadCont (RWST r w s m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> RWST r w s m b) -> RWST r w s m a) -> RWST r w s m a #

(Monoid w, MonadCont m) => MonadCont (RWST r w s m) 
Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> RWST r w s m b) -> RWST r w s m a) -> RWST r w s m a #

MonadCont (OverrideSim p sym ext rtp args ret) Source # 
Instance details

Defined in Lang.Crucible.Simulator.OverrideSim

Methods

callCC :: ((a -> OverrideSim p sym ext rtp args ret b) -> OverrideSim p sym ext rtp args ret a) -> OverrideSim p sym ext rtp args ret a #

class Monad m => MonadState s (m :: Type -> Type) | m -> s where #

Minimal definition is either both of get and put or just state

Minimal complete definition

state | get, put

Methods

get :: m s #

Return the state from the internals of the monad.

put :: s -> m () #

Replace the state inside the monad.

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

Embed a simple state action into the monad.

Instances

Instances details
MonadState s m => MonadState s (Free m) 
Instance details

Defined in Control.Monad.Free

Methods

get :: Free m s #

put :: s -> Free m () #

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

MonadState s m => MonadState s (MaybeT m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: MaybeT m s #

put :: s -> MaybeT m () #

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

(Functor f, MonadState s m) => MonadState s (FreeT f m) 
Instance details

Defined in Control.Monad.Trans.Free

Methods

get :: FreeT f m s #

put :: s -> FreeT f m () #

state :: (s -> (a, s)) -> FreeT f m a #

(Monoid w, MonadState s m) => MonadState s (AccumT w m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.State.Class

Methods

get :: AccumT w m s #

put :: s -> AccumT w m () #

state :: (s -> (a, s)) -> AccumT w m a #

MonadState s m => MonadState s (ExceptT e m)

Since: mtl-2.2

Instance details

Defined in Control.Monad.State.Class

Methods

get :: ExceptT e m s #

put :: s -> ExceptT e m () #

state :: (s -> (a, s)) -> ExceptT e m a #

MonadState s m => MonadState s (IdentityT m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: IdentityT m s #

put :: s -> IdentityT m () #

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

MonadState s m => MonadState s (ReaderT r m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: ReaderT r m s #

put :: s -> ReaderT r m () #

state :: (s -> (a, s)) -> ReaderT r m a #

MonadState s m => MonadState s (SelectT r m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.State.Class

Methods

get :: SelectT r m s #

put :: s -> SelectT r m () #

state :: (s -> (a, s)) -> SelectT r m a #

Monad m => MonadState s (StateT s m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: StateT s m s #

put :: s -> StateT s m () #

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

Monad m => MonadState s (StateT s m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: StateT s m s #

put :: s -> StateT s m () #

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

(Monoid w, MonadState s m) => MonadState s (WriterT w m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.State.Class

Methods

get :: WriterT w m s #

put :: s -> WriterT w m () #

state :: (s -> (a, s)) -> WriterT w m a #

(Monoid w, MonadState s m) => MonadState s (WriterT w m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: WriterT w m s #

put :: s -> WriterT w m () #

state :: (s -> (a, s)) -> WriterT w m a #

(Monoid w, MonadState s m) => MonadState s (WriterT w m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: WriterT w m s #

put :: s -> WriterT w m () #

state :: (s -> (a, s)) -> WriterT w m a #

MonadState s (StateContT s r m) Source # 
Instance details

Defined in Lang.Crucible.Utils.StateContT

Methods

get :: StateContT s r m s #

put :: s -> StateContT s r m () #

state :: (s -> (a, s)) -> StateContT s r m a #

MonadState s m => MonadState s (ContT r m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: ContT r m s #

put :: s -> ContT r m () #

state :: (s -> (a, s)) -> ContT r m a #

(Monad m, Monoid w) => MonadState s (RWST r w s m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.State.Class

Methods

get :: RWST r w s m s #

put :: s -> RWST r w s m () #

state :: (s -> (a, s)) -> RWST r w s m a #

(Monad m, Monoid w) => MonadState s (RWST r w s m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: RWST r w s m s #

put :: s -> RWST r w s m () #

state :: (s -> (a, s)) -> RWST r w s m a #

(Monad m, Monoid w) => MonadState s (RWST r w s m) 
Instance details

Defined in Control.Monad.State.Class

Methods

get :: RWST r w s m s #

put :: s -> RWST r w s m () #

state :: (s -> (a, s)) -> RWST r w s m a #

MonadState u (Rewriter ext h s ret u) Source # 
Instance details

Defined in Lang.Crucible.Utils.RegRewrite

Methods

get :: Rewriter ext h s ret u u #

put :: u -> Rewriter ext h s ret u () #

state :: (u -> (a, u)) -> Rewriter ext h s ret u a #

Monad m => MonadState (t s) (Generator ext s t ret m) Source # 
Instance details

Defined in Lang.Crucible.CFG.Generator

Methods

get :: Generator ext s t ret m (t s) #

put :: t s -> Generator ext s t ret m () #

state :: (t s -> (a, t s)) -> Generator ext s t ret m a #

MonadState (SimState p sym ext rtp (OverrideLang ret) ('Just args)) (OverrideSim p sym ext rtp args ret) Source # 
Instance details

Defined in Lang.Crucible.Simulator.OverrideSim

Methods

get :: OverrideSim p sym ext rtp args ret (SimState p sym ext rtp (OverrideLang ret) ('Just args)) #

put :: SimState p sym ext rtp (OverrideLang ret) ('Just args) -> OverrideSim p sym ext rtp args ret () #

state :: (SimState p sym ext rtp (OverrideLang ret) ('Just args) -> (a, SimState p sym ext rtp (OverrideLang ret) ('Just args))) -> OverrideSim p sym ext rtp args ret a #