imperative-edsl-0.6: Deep embedding of imperative programs with code generation

Safe HaskellNone
LanguageHaskell2010

Control.Monads

Synopsis

Documentation

newtype SupplyT m a Source #

Constructors

SupplyT 

Fields

Instances

MonadTrans SupplyT Source # 

Methods

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

MonadReader r m => MonadReader r (SupplyT m) Source # 

Methods

ask :: SupplyT m r #

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

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

MonadState s m => MonadState s (SupplyT m) Source # 

Methods

get :: SupplyT m s #

put :: s -> SupplyT m () #

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

MonadWriter w m => MonadWriter w (SupplyT m) Source # 

Methods

writer :: (a, w) -> SupplyT m a #

tell :: w -> SupplyT m () #

listen :: SupplyT m a -> SupplyT m (a, w) #

pass :: SupplyT m (a, w -> w) -> SupplyT m a #

Monad m => Monad (SupplyT m) Source # 

Methods

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

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

return :: a -> SupplyT m a #

fail :: String -> SupplyT m a #

Functor m => Functor (SupplyT m) Source # 

Methods

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

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

MonadFix m => MonadFix (SupplyT m) Source # 

Methods

mfix :: (a -> SupplyT m a) -> SupplyT m a #

Monad m => Applicative (SupplyT m) Source # 

Methods

pure :: a -> SupplyT m a #

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

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

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

MonadIO m => MonadIO (SupplyT m) Source # 

Methods

liftIO :: IO a -> SupplyT m a #

MonadException m => MonadException (SupplyT m) Source # 

Methods

throw :: Exception e => e -> SupplyT m a #

catch :: Exception e => SupplyT m a -> (e -> SupplyT m a) -> SupplyT m a #

finally :: SupplyT m a -> SupplyT m b -> SupplyT m a #

Monad m => MonadSupply (SupplyT m) Source # 

class Monad m => MonadSupply m where Source #

Methods

fresh :: m Integer Source #

Create a fresh variable identifier

fresh :: (m ~ t n, MonadTrans t, MonadSupply n) => m Integer Source #

Create a fresh variable identifier

runSupplyT :: Monad m => SupplyT m a -> m a Source #

type Loc = Integer Source #

Program location

newtype TickT m a Source #

Tick monad

Constructors

TickT 

Fields

Instances

MonadTrans TickT Source # 

Methods

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

MonadReader r m => MonadReader r (TickT m) Source # 

Methods

ask :: TickT m r #

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

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

MonadState s m => MonadState s (TickT m) Source # 

Methods

get :: TickT m s #

put :: s -> TickT m () #

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

MonadWriter w m => MonadWriter w (TickT m) Source # 

Methods

writer :: (a, w) -> TickT m a #

tell :: w -> TickT m () #

listen :: TickT m a -> TickT m (a, w) #

pass :: TickT m (a, w -> w) -> TickT m a #

Monad m => Monad (TickT m) Source # 

Methods

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

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

return :: a -> TickT m a #

fail :: String -> TickT m a #

Functor m => Functor (TickT m) Source # 

Methods

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

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

MonadFix m => MonadFix (TickT m) Source # 

Methods

mfix :: (a -> TickT m a) -> TickT m a #

Monad m => Applicative (TickT m) Source # 

Methods

pure :: a -> TickT m a #

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

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

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

Monad m => MonadTick (TickT m) Source # 

Methods

tick :: TickT m () Source #

loc :: TickT m Loc Source #

class Monad m => MonadTick m where Source #

Methods

tick :: m () Source #

tick :: (m ~ t n, MonadTrans t, MonadTick n) => m () Source #

loc :: m Loc Source #

loc :: (m ~ t n, MonadTrans t, MonadTick n) => m Loc Source #

Instances

Monad m => MonadTick (TickT m) Source # 

Methods

tick :: TickT m () Source #

loc :: TickT m Loc Source #

MonadTick m => MonadTick (StateT s m) Source # 

Methods

tick :: StateT s m () Source #

loc :: StateT s m Loc Source #

MonadTick m => MonadTick (StateT s m) Source # 

Methods

tick :: StateT s m () Source #

loc :: StateT s m Loc Source #

(MonadTick m, Monoid w) => MonadTick (WriterT w m) Source # 

Methods

tick :: WriterT w m () Source #

loc :: WriterT w m Loc Source #

MonadTick m => MonadTick (ReaderT * r m) Source # 

Methods

tick :: ReaderT * r m () Source #

loc :: ReaderT * r m Loc Source #

runTickT :: Monad m => TickT m a -> m a Source #

runTick :: Tick a -> a Source #

freshStr :: MonadSupply m => String -> m String Source #

Create a fresh string identifier with the given prefix