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

Safe HaskellNone
LanguageHaskell2010

Control.Effects

Synopsis

Documentation

data MsgOrRes Source #

Constructors

Msg 
Res 

data family Effect (effKind :: Type) :: effKind -> MsgOrRes -> Type Source #

Instances

data Effect NonDeterministic Source # 
data Effect (Early a) Source # 
data Effect (Early a) where
data Effect (ReadEnv e) Source # 
data Effect (Signal a b) Source # 
data Effect (Signal a b) where
data Effect (State k s) Source # 
data Effect (State k s) where

class Monad m => MonadEffect effKind m where Source #

Minimal complete definition

effect

Methods

effect :: Effect effKind method Msg -> m (Effect effKind method Res) Source #

Use the effect described by method.

Instances

(MonadEffect method m, MonadTrans t, Monad (t m)) => MonadEffect method (t m) Source # 

Methods

effect :: Effect method method Msg -> t m (Effect method method Res) Source #

Monad m => MonadEffect NonDeterministic (ListT m) Source # 
Monad m => MonadEffect effKind (EffectHandler effKind m) Source # 

Methods

effect :: Effect effKind method Msg -> EffectHandler effKind m (Effect effKind method Res) Source #

TypeError Constraint (UnhandledError a b) => MonadEffect (Signal a b) IO Source # 

Methods

effect :: Effect (Signal a b) method Msg -> IO (Effect (Signal a b) method Res) Source #

Monad m => MonadEffect (Signal a b) (MaybeT m) Source # 

Methods

effect :: Effect (Signal a b) method Msg -> MaybeT m (Effect (Signal a b) method Res) Source #

(Monad m, (~) * b c) => MonadEffect (Signal a c) (EffectHandler (Signal a b) m) Source # 

Methods

effect :: Effect (Signal a c) method Msg -> EffectHandler (Signal a b) m (Effect (Signal a c) method Res) Source #

(Show e, Monad m) => MonadEffect (Signal e b) (ExceptT SomeSignal m) Source # 

Methods

effect :: Effect (Signal e b) method Msg -> ExceptT SomeSignal m (Effect (Signal e b) method Res) Source #

Monad m => MonadEffect (Signal e b) (ExceptT e m) Source # 

Methods

effect :: Effect (Signal e b) method Msg -> ExceptT e m (Effect (Signal e b) method Res) Source #

Monad m => MonadEffect (State * s) (StateT s m) Source # 

Methods

effect :: Effect (State * s) method Msg -> StateT s m (Effect (State * s) method Res) Source #

newtype EffectWithKind effKind m Source #

Constructors

EffectWithKind 

Fields

newtype EffectHandler effKind m a Source #

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

Constructors

EffectHandler 

Fields

Instances

MonadBase b m => MonadBase b (EffectHandler effKind m) Source # 

Methods

liftBase :: b α -> EffectHandler effKind m α #

MonadBaseControl b m => MonadBaseControl b (EffectHandler effKind m) Source # 

Associated Types

type StM (EffectHandler effKind m :: * -> *) a :: * #

Methods

liftBaseWith :: (RunInBase (EffectHandler effKind m) b -> b a) -> EffectHandler effKind m a #

restoreM :: StM (EffectHandler effKind m) a -> EffectHandler effKind m a #

MonadReader s m => MonadReader s (EffectHandler effKind m) Source # 

Methods

ask :: EffectHandler effKind m s #

local :: (s -> s) -> EffectHandler effKind m a -> EffectHandler effKind m a #

reader :: (s -> a) -> EffectHandler effKind m a #

MonadState s m => MonadState s (EffectHandler effKind m) Source # 

Methods

get :: EffectHandler effKind m s #

put :: s -> EffectHandler effKind m () #

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

Monad m => MonadEffect effKind (EffectHandler effKind m) Source # 

Methods

effect :: Effect effKind method Msg -> EffectHandler effKind m (Effect effKind method Res) Source #

MonadTrans (EffectHandler effKind) Source # 

Methods

lift :: Monad m => m a -> EffectHandler effKind m a #

RunnableTrans (EffectHandler effKind) Source # 

Associated Types

type TransformerState (EffectHandler effKind :: (* -> *) -> * -> *) (m :: * -> *) :: * Source #

type TransformerResult (EffectHandler effKind :: (* -> *) -> * -> *) (m :: * -> *) a :: * Source #

Monad m => Monad (EffectHandler effKind m) Source # 

Methods

(>>=) :: EffectHandler effKind m a -> (a -> EffectHandler effKind m b) -> EffectHandler effKind m b #

(>>) :: EffectHandler effKind m a -> EffectHandler effKind m b -> EffectHandler effKind m b #

return :: a -> EffectHandler effKind m a #

fail :: String -> EffectHandler effKind m a #

Functor m => Functor (EffectHandler effKind m) Source # 

Methods

fmap :: (a -> b) -> EffectHandler effKind m a -> EffectHandler effKind m b #

(<$) :: a -> EffectHandler effKind m b -> EffectHandler effKind m a #

Applicative m => Applicative (EffectHandler effKind m) Source # 

Methods

pure :: a -> EffectHandler effKind m a #

(<*>) :: EffectHandler effKind m (a -> b) -> EffectHandler effKind m a -> EffectHandler effKind m b #

(*>) :: EffectHandler effKind m a -> EffectHandler effKind m b -> EffectHandler effKind m b #

(<*) :: EffectHandler effKind m a -> EffectHandler effKind m b -> EffectHandler effKind m a #

MonadIO m => MonadIO (EffectHandler effKind m) Source # 

Methods

liftIO :: IO a -> EffectHandler effKind m a #

MonadRandom m => MonadRandom (EffectHandler effKind m) Source # 

Methods

getRandomR :: Random a => (a, a) -> EffectHandler effKind m a #

getRandom :: Random a => EffectHandler effKind m a #

getRandomRs :: Random a => (a, a) -> EffectHandler effKind m [a] #

getRandoms :: Random a => EffectHandler effKind m [a] #

Alternative m => Alternative (EffectHandler effKind m) Source # 

Methods

empty :: EffectHandler effKind m a #

(<|>) :: EffectHandler effKind m a -> EffectHandler effKind m a -> EffectHandler effKind m a #

some :: EffectHandler effKind m a -> EffectHandler effKind m [a] #

many :: EffectHandler effKind m a -> EffectHandler effKind m [a] #

MonadThrow m => MonadThrow (EffectHandler effKind m) Source # 

Methods

throwM :: Exception e => e -> EffectHandler effKind m a #

MonadCatch m => MonadCatch (EffectHandler effKind m) Source # 

Methods

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

(Monad m, (~) * b c) => MonadEffect (Signal a c) (EffectHandler (Signal a b) m) Source # 

Methods

effect :: Effect (Signal a c) method Msg -> EffectHandler (Signal a b) m (Effect (Signal a c) method Res) Source #

type TransformerState (EffectHandler effKind) m Source # 
type TransformerState (EffectHandler effKind) m = EffectWithKind effKind m
type TransformerResult (EffectHandler effKind) m a Source # 
type TransformerResult (EffectHandler effKind) m a = a
type StM (EffectHandler effKind m) a Source # 
type StM (EffectHandler effKind m) a = StM (ReaderT * (EffectWithKind effKind m) m) a

handleEffect :: (forall method. Effect effKind method Msg -> m (Effect effKind method Res)) -> EffectHandler effKind m a -> m a Source #

Handle the effect described by effKind.

type family MonadEffects effs m :: Constraint where ... Source #

Equations

MonadEffects '[] m = () 
MonadEffects (eff ': effs) m = (MonadEffect eff m, MonadEffects effs m)