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

Safe HaskellNone
LanguageHaskell2010

Control.Effects

Documentation

class Effect e where Source #

Associated Types

data EffMethods e (m :: * -> *) :: * Source #

type CanLift e (t :: (* -> *) -> * -> *) :: Constraint Source #

Methods

liftThrough :: forall t m. (CanLift e t, Monad m, Monad (t m)) => EffMethods e m -> EffMethods e (t m) Source #

liftThrough :: forall t m. (Generic (EffMethods e m), MonadTrans t, Monad m, Monad (t m), SimpleMethods (EffMethods e) m t) => EffMethods e m -> EffMethods e (t m) Source #

mergeContext :: Monad m => m (EffMethods e m) -> EffMethods e m Source #

mergeContext :: (Generic (EffMethods e m), MonadicMethods (EffMethods e) m) => m (EffMethods e m) -> EffMethods e m Source #

Instances

Effect NonDeterminism Source # 
Effect Async Source # 

Associated Types

data EffMethods Async (m :: * -> *) :: * Source #

type CanLift Async (t :: (* -> *) -> * -> *) :: Constraint Source #

Effect (State s) Source # 

Associated Types

data EffMethods (State s) (m :: * -> *) :: * Source #

type CanLift (State s) (t :: (* -> *) -> * -> *) :: Constraint Source #

Methods

liftThrough :: (CanLift (State s) t, Monad m, Monad (t m)) => EffMethods (State s) m -> EffMethods (State s) (t m) Source #

mergeContext :: Monad m => m (EffMethods (State s) m) -> EffMethods (State s) m Source #

Effect (HandleException e) Source # 

Associated Types

data EffMethods (HandleException e) (m :: * -> *) :: * Source #

type CanLift (HandleException e) (t :: (* -> *) -> * -> *) :: Constraint Source #

Effect (ReadEnv e) Source # 

Associated Types

data EffMethods (ReadEnv e) (m :: * -> *) :: * Source #

type CanLift (ReadEnv e) (t :: (* -> *) -> * -> *) :: Constraint Source #

Methods

liftThrough :: (CanLift (ReadEnv e) t, Monad m, Monad (t m)) => EffMethods (ReadEnv e) m -> EffMethods (ReadEnv e) (t m) Source #

mergeContext :: Monad m => m (EffMethods (ReadEnv e) m) -> EffMethods (ReadEnv e) m Source #

Effect (Early a) Source # 

Associated Types

data EffMethods (Early a) (m :: * -> *) :: * Source #

type CanLift (Early a) (t :: (* -> *) -> * -> *) :: Constraint Source #

Methods

liftThrough :: (CanLift (Early a) t, Monad m, Monad (t m)) => EffMethods (Early a) m -> EffMethods (Early a) (t m) Source #

mergeContext :: Monad m => m (EffMethods (Early a) m) -> EffMethods (Early a) m Source #

Effect (Signal a b) Source # 

Associated Types

data EffMethods (Signal a b) (m :: * -> *) :: * Source #

type CanLift (Signal a b) (t :: (* -> *) -> * -> *) :: Constraint Source #

Methods

liftThrough :: (CanLift (Signal a b) t, Monad m, Monad (t m)) => EffMethods (Signal a b) m -> EffMethods (Signal a b) (t m) Source #

mergeContext :: Monad m => m (EffMethods (Signal a b) m) -> EffMethods (Signal a b) m Source #

class (Effect e, Monad m) => MonadEffect e m where Source #

Minimal complete definition

effect

Methods

effect :: EffMethods e m Source #

Instances

MonadEffect Async IO Source #

The IO implementation uses the async library.

(MonadEffect e m, Monad (t m), CanLift e t) => MonadEffect e (t m) Source # 

Methods

effect :: EffMethods e (t m) Source #

Monad m => MonadEffect NonDeterminism (ListT m) Source # 
(Effect e, Monad m, CanLift e (RuntimeImplemented e)) => MonadEffect e (RuntimeImplemented e m) Source # 
Monad m => MonadEffect (State s) (StateT s m) Source # 

Methods

effect :: EffMethods (State s) (StateT s m) Source #

Monad m => MonadEffect (HandleException e) (ExceptT e m) Source # 
TypeError Constraint (UnhandledError a b) => MonadEffect (Signal a b) IO Source # 

Methods

effect :: EffMethods (Signal a b) IO Source #

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

Methods

effect :: EffMethods (Signal a b) (MaybeT m) Source #

(Monad m, (~) * b c) => MonadEffect (Signal a c) (RuntimeImplemented (Signal a b) m) Source # 
(Show e, Monad m) => MonadEffect (Signal e b) (ExceptT SomeSignal m) Source # 
Monad m => MonadEffect (Signal e b) (ExceptT e m) Source # 

Methods

effect :: EffMethods (Signal e b) (ExceptT e m) Source #

newtype RuntimeImplemented e m a Source #

Instances

MonadBase b m => MonadBase b (RuntimeImplemented e m) Source # 

Methods

liftBase :: b α -> RuntimeImplemented e m α #

MonadBaseControl b m => MonadBaseControl b (RuntimeImplemented e m) Source # 

Associated Types

type StM (RuntimeImplemented e m :: * -> *) a :: * #

MonadState s m => MonadState s (RuntimeImplemented e m) Source # 

Methods

get :: RuntimeImplemented e m s #

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

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

MonadReader r m => MonadReader r (RuntimeImplemented e m) Source # 

Methods

ask :: RuntimeImplemented e m r #

local :: (r -> r) -> RuntimeImplemented e m a -> RuntimeImplemented e m a #

reader :: (r -> a) -> RuntimeImplemented e m a #

(Effect e, Monad m, CanLift e (RuntimeImplemented e)) => MonadEffect e (RuntimeImplemented e m) Source # 
MonadTrans (RuntimeImplemented e) Source # 

Methods

lift :: Monad m => m a -> RuntimeImplemented e m a #

RunnableTrans (RuntimeImplemented e) Source # 
Monad m => Monad (RuntimeImplemented e m) Source # 
Functor m => Functor (RuntimeImplemented e m) Source # 

Methods

fmap :: (a -> b) -> RuntimeImplemented e m a -> RuntimeImplemented e m b #

(<$) :: a -> RuntimeImplemented e m b -> RuntimeImplemented e m a #

Applicative m => Applicative (RuntimeImplemented e m) Source # 
MonadRandom m => MonadRandom (RuntimeImplemented e m) Source # 

Methods

getRandom :: Random a => RuntimeImplemented e m a #

getRandoms :: Random a => RuntimeImplemented e m [a] #

getRandomR :: Random a => (a, a) -> RuntimeImplemented e m a #

getRandomRs :: Random a => (a, a) -> RuntimeImplemented e m [a] #

MonadIO m => MonadIO (RuntimeImplemented e m) Source # 

Methods

liftIO :: IO a -> RuntimeImplemented e m a #

Alternative m => Alternative (RuntimeImplemented e m) Source # 
MonadPlus m => MonadPlus (RuntimeImplemented e m) Source # 
MonadThrow m => MonadThrow (RuntimeImplemented e m) Source # 

Methods

throwM :: Exception e => e -> RuntimeImplemented e m a #

MonadCatch m => MonadCatch (RuntimeImplemented e m) Source # 

Methods

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

(Monad m, (~) * b c) => MonadEffect (Signal a c) (RuntimeImplemented (Signal a b) m) Source # 
type TransformerState (RuntimeImplemented e) m Source # 
type TransformerResult (RuntimeImplemented e) m a Source # 
type StM (RuntimeImplemented e m) a Source # 
type StM (RuntimeImplemented e m) a = StM (ReaderT * (EffMethods e m) m) a

implement :: forall e m a. EffMethods e m -> RuntimeImplemented e m a -> m a Source #

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

Equations

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