simple-effects-0.7.0.2: A simple effect system that integrates with MTL

Safe HaskellNone
LanguageHaskell2010

Control.Effects1

Synopsis

Documentation

type family EffectMsg1 eff :: * -> * Source #

type family EffectCon1 eff a :: Constraint Source #

Instances

class Monad m => MonadEffect1 eff m where Source #

Minimal complete definition

effect1

Methods

effect1 :: EffectCon1 eff a => proxy eff -> EffectMsg1 eff a -> m (EffectRes1 eff a) Source #

Use the effect described by eff.

Instances

(MonadEffect1 eff m, MonadTrans t, Monad (t m)) => MonadEffect1 eff (t m) Source # 

Methods

effect1 :: EffectCon1 eff a => proxy eff -> EffectMsg1 eff a -> t m (EffectRes1 eff a) Source #

Monad m => MonadEffect1 NonDeterministic (ListT m) Source # 
Monad m => MonadEffect1 eff (EffectHandler1 eff m) Source # 

Methods

effect1 :: EffectCon1 eff a => proxy eff -> EffectMsg1 eff a -> EffectHandler1 eff m (EffectRes1 eff a) Source #

Monad m => MonadEffect1 (State s) (StateT s m) Source # 

Methods

effect1 :: EffectCon1 (State s) a => proxy (State s) -> EffectMsg1 (State s) a -> StateT s m (EffectRes1 (State s) a) Source #

newtype EffHandling1 eff m Source #

Constructors

EffHandling1 

Fields

newtype EffectHandler1 eff m a Source #

The EffectHandler1 is really just a ReaderT carrying around the function that knows how to handle the effect.

Constructors

EffectHandler1 

Instances

MonadBase IO m => MonadBase IO (EffectHandler1 eff m) Source # 

Methods

liftBase :: IO α -> EffectHandler1 eff m α #

MonadBaseControl IO m => MonadBaseControl IO (EffectHandler1 eff m) Source # 

Associated Types

type StM (EffectHandler1 eff m :: * -> *) a :: * #

Methods

liftBaseWith :: (RunInBase (EffectHandler1 eff m) IO -> IO a) -> EffectHandler1 eff m a #

restoreM :: StM (EffectHandler1 eff m) a -> EffectHandler1 eff m a #

MonadReader s m => MonadReader s (EffectHandler1 eff m) Source # 

Methods

ask :: EffectHandler1 eff m s #

local :: (s -> s) -> EffectHandler1 eff m a -> EffectHandler1 eff m a #

reader :: (s -> a) -> EffectHandler1 eff m a #

MonadState s m => MonadState s (EffectHandler1 eff m) Source # 

Methods

get :: EffectHandler1 eff m s #

put :: s -> EffectHandler1 eff m () #

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

Monad m => MonadEffect1 eff (EffectHandler1 eff m) Source # 

Methods

effect1 :: EffectCon1 eff a => proxy eff -> EffectMsg1 eff a -> EffectHandler1 eff m (EffectRes1 eff a) Source #

MonadTrans (EffectHandler1 eff) Source # 

Methods

lift :: Monad m => m a -> EffectHandler1 eff m a #

RunnableTrans (EffectHandler1 eff) Source # 

Associated Types

type TransformerState (EffectHandler1 eff :: (* -> *) -> * -> *) (m :: * -> *) :: * Source #

type TransformerResult (EffectHandler1 eff :: (* -> *) -> * -> *) (m :: * -> *) a :: * Source #

Monad m => Monad (EffectHandler1 eff m) Source # 

Methods

(>>=) :: EffectHandler1 eff m a -> (a -> EffectHandler1 eff m b) -> EffectHandler1 eff m b #

(>>) :: EffectHandler1 eff m a -> EffectHandler1 eff m b -> EffectHandler1 eff m b #

return :: a -> EffectHandler1 eff m a #

fail :: String -> EffectHandler1 eff m a #

Functor m => Functor (EffectHandler1 eff m) Source # 

Methods

fmap :: (a -> b) -> EffectHandler1 eff m a -> EffectHandler1 eff m b #

(<$) :: a -> EffectHandler1 eff m b -> EffectHandler1 eff m a #

Applicative m => Applicative (EffectHandler1 eff m) Source # 

Methods

pure :: a -> EffectHandler1 eff m a #

(<*>) :: EffectHandler1 eff m (a -> b) -> EffectHandler1 eff m a -> EffectHandler1 eff m b #

(*>) :: EffectHandler1 eff m a -> EffectHandler1 eff m b -> EffectHandler1 eff m b #

(<*) :: EffectHandler1 eff m a -> EffectHandler1 eff m b -> EffectHandler1 eff m a #

MonadIO m => MonadIO (EffectHandler1 eff m) Source # 

Methods

liftIO :: IO a -> EffectHandler1 eff m a #

MonadRandom m => MonadRandom (EffectHandler1 eff m) Source # 

Methods

getRandomR :: Random a => (a, a) -> EffectHandler1 eff m a #

getRandom :: Random a => EffectHandler1 eff m a #

getRandomRs :: Random a => (a, a) -> EffectHandler1 eff m [a] #

getRandoms :: Random a => EffectHandler1 eff m [a] #

Alternative m => Alternative (EffectHandler1 eff m) Source # 

Methods

empty :: EffectHandler1 eff m a #

(<|>) :: EffectHandler1 eff m a -> EffectHandler1 eff m a -> EffectHandler1 eff m a #

some :: EffectHandler1 eff m a -> EffectHandler1 eff m [a] #

many :: EffectHandler1 eff m a -> EffectHandler1 eff m [a] #

MonadThrow m => MonadThrow (EffectHandler1 eff m) Source # 

Methods

throwM :: Exception e => e -> EffectHandler1 eff m a #

MonadCatch m => MonadCatch (EffectHandler1 eff m) Source # 

Methods

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

type TransformerState (EffectHandler1 eff) m Source # 
type TransformerResult (EffectHandler1 eff) m a Source # 
type StM (EffectHandler1 eff m) a Source # 
type StM (EffectHandler1 eff m) a = StM (ReaderT * (EffHandling1 eff m) m) a

handleEffect1 :: (forall a. EffectCon1 eff a => EffectMsg1 eff a -> m (EffectRes1 eff a)) -> EffectHandler1 eff m b -> m b Source #

Handle the effect described by eff.