effet-0.1.0.0: An Effect System based on Type Classes
Copyright(c) Michael Szvetits 2020
LicenseBSD3 (see the file LICENSE)
Maintainertypedbyte@qualified.name
Stabilitystable
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Control.Effect.Machinery.Via

Description

This module defines the type Via which indicates that a specific effect is handled by a specific monad transformer (also known as effect handler or effect interpreter).

It also defines the G type, which is the global tag that is used for untagged effects.

Synopsis

Documentation

newtype Via (eff :: Effect) (t :: Transformer) m a Source #

This type indicates that an effect (i.e., a type class) eff is handled by a specific monad transformer t. The type is a simple wrapper around the monad transformer itself. The whole purpose of this type is to guide the type system to pick the instance of type class eff given by the type t, and to delegate all other effects that are not eff to their handlers which are located somewhere further down the monad transformer stack.

Constructors

Via 

Fields

Instances

Instances details
Control (RWS' tag r w s) t m => RWS' (tag :: k) r w s (Via eff t m) Source # 
Instance details

Defined in Control.Effect.RWS

Methods

ask' :: Via eff t m r Source #

local' :: (r -> r) -> Via eff t m a -> Via eff t m a Source #

tell' :: w -> Via eff t m () Source #

listen' :: Via eff t m a -> Via eff t m (w, a) Source #

censor' :: (w -> w) -> Via eff t m a -> Via eff t m a Source #

get' :: Via eff t m s Source #

put' :: s -> Via eff t m () Source #

Handle (RWS' tag r w s) t m => RWS' (tag :: k) r w s (Via (RWS' tag r w s) t m) Source # 
Instance details

Defined in Control.Effect.RWS

Methods

ask' :: Via (RWS' tag r w s) t m r Source #

local' :: (r -> r) -> Via (RWS' tag r w s) t m a -> Via (RWS' tag r w s) t m a Source #

tell' :: w -> Via (RWS' tag r w s) t m () Source #

listen' :: Via (RWS' tag r w s) t m a -> Via (RWS' tag r w s) t m (w, a) Source #

censor' :: (w -> w) -> Via (RWS' tag r w s) t m a -> Via (RWS' tag r w s) t m a Source #

get' :: Via (RWS' tag r w s) t m s Source #

put' :: s -> Via (RWS' tag r w s) t m () Source #

Lift (Map' tag k2 v) t m => Map' (tag :: k1) k2 v (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Map

Methods

clear' :: Via eff t m () Source #

lookup' :: k2 -> Via eff t m (Maybe v) Source #

update' :: k2 -> Maybe v -> Via eff t m () Source #

Handle (Map' tag k2 v) t m => Map' (tag :: k1) k2 v (Via (Map' tag k2 v) t m) Source # 
Instance details

Defined in Control.Effect.Map

Methods

clear' :: Via (Map' tag k2 v) t m () Source #

lookup' :: k2 -> Via (Map' tag k2 v) t m (Maybe v) Source #

update' :: k2 -> Maybe v -> Via (Map' tag k2 v) t m () Source #

Control (Error' tag e) t m => Error' (tag :: k) e (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Error

Methods

throwError' :: e -> Via eff t m a Source #

catchError' :: Via eff t m a -> (e -> Via eff t m a) -> Via eff t m a Source #

Handle (Error' tag e) t m => Error' (tag :: k) e (Via (Error' tag e) t m) Source # 
Instance details

Defined in Control.Effect.Error

Methods

throwError' :: e -> Via (Error' tag e) t m a Source #

catchError' :: Via (Error' tag e) t m a -> (e -> Via (Error' tag e) t m a) -> Via (Error' tag e) t m a Source #

Control (Reader' tag r) t m => Reader' (tag :: k) r (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Reader

Methods

ask' :: Via eff t m r Source #

local' :: (r -> r) -> Via eff t m a -> Via eff t m a Source #

reader' :: (r -> a) -> Via eff t m a Source #

Handle (Reader' tag r) t m => Reader' (tag :: k) r (Via (Reader' tag r) t m) Source # 
Instance details

Defined in Control.Effect.Reader

Methods

ask' :: Via (Reader' tag r) t m r Source #

local' :: (r -> r) -> Via (Reader' tag r) t m a -> Via (Reader' tag r) t m a Source #

reader' :: (r -> a) -> Via (Reader' tag r) t m a Source #

Lift (State' tag s) t m => State' (tag :: k) s (Via eff t m) Source # 
Instance details

Defined in Control.Effect.State

Methods

get' :: Via eff t m s Source #

put' :: s -> Via eff t m () Source #

state' :: (s -> (s, a)) -> Via eff t m a Source #

Handle (State' tag s) t m => State' (tag :: k) s (Via (State' tag s) t m) Source # 
Instance details

Defined in Control.Effect.State

Methods

get' :: Via (State' tag s) t m s Source #

put' :: s -> Via (State' tag s) t m () Source #

state' :: (s -> (s, a)) -> Via (State' tag s) t m a Source #

Control (Writer' tag w) t m => Writer' (tag :: k) w (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Writer

Methods

tell' :: w -> Via eff t m () Source #

listen' :: Via eff t m a -> Via eff t m (w, a) Source #

censor' :: (w -> w) -> Via eff t m a -> Via eff t m a Source #

Handle (Writer' tag w) t m => Writer' (tag :: k) w (Via (Writer' tag w) t m) Source # 
Instance details

Defined in Control.Effect.Writer

Methods

tell' :: w -> Via (Writer' tag w) t m () Source #

listen' :: Via (Writer' tag w) t m a -> Via (Writer' tag w) t m (w, a) Source #

censor' :: (w -> w) -> Via (Writer' tag w) t m a -> Via (Writer' tag w) t m a Source #

Handle (Cont' tag) t m => Cont' (tag :: k) (Via (Cont' tag) t m) Source # 
Instance details

Defined in Control.Effect.Cont

Methods

callCC' :: ((a -> Via (Cont' tag) t m b) -> Via (Cont' tag) t m a) -> Via (Cont' tag) t m a Source #

Control (Cont' tag) t m => Cont' (tag :: k) (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Cont

Methods

callCC' :: ((a -> Via eff t m b) -> Via eff t m a) -> Via eff t m a Source #

Control (Resource' tag) t m => Resource' (tag :: k) (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Resource

Methods

bracket' :: Via eff t m a -> (a -> Via eff t m c) -> (a -> Via eff t m b) -> Via eff t m b Source #

bracketOnError' :: Via eff t m a -> (a -> Via eff t m c) -> (a -> Via eff t m b) -> Via eff t m b Source #

Handle (Resource' tag) t m => Resource' (tag :: k) (Via (Resource' tag) t m) Source # 
Instance details

Defined in Control.Effect.Resource

Methods

bracket' :: Via (Resource' tag) t m a -> (a -> Via (Resource' tag) t m c) -> (a -> Via (Resource' tag) t m b) -> Via (Resource' tag) t m b Source #

bracketOnError' :: Via (Resource' tag) t m a -> (a -> Via (Resource' tag) t m c) -> (a -> Via (Resource' tag) t m b) -> Via (Resource' tag) t m b Source #

(Monad (t m), MonadBase b m, MonadTrans t) => MonadBase b (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Methods

liftBase :: b α -> Via eff t m α #

(Monad (t m), MonadBaseControl b m, MonadTransControl t) => MonadBaseControl b (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Associated Types

type StM (Via eff t m) a #

Methods

liftBaseWith :: (RunInBase (Via eff t m) b -> b a) -> Via eff t m a #

restoreM :: StM (Via eff t m) a -> Via eff t m a #

Lift (Embed n) t m => Embed n (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

embed :: n a -> Via eff t m a Source #

Handle (Embed n) t m => Embed n (Via (Embed n) t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

embed :: n a -> Via (Embed n) t m a Source #

MonadTrans t => MonadTrans (Via eff t) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Methods

lift :: Monad m => m a -> Via eff t m a #

MonadTransControl t => MonadTransControl (Via eff t) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Associated Types

type StT (Via eff t) a #

Methods

liftWith :: Monad m => (Run (Via eff t) -> m a) -> Via eff t m a #

restoreT :: Monad m => m (StT (Via eff t) a) -> Via eff t m a #

Monad (t m) => Monad (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Methods

(>>=) :: Via eff t m a -> (a -> Via eff t m b) -> Via eff t m b #

(>>) :: Via eff t m a -> Via eff t m b -> Via eff t m b #

return :: a -> Via eff t m a #

Functor (t m) => Functor (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Methods

fmap :: (a -> b) -> Via eff t m a -> Via eff t m b #

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

Applicative (t m) => Applicative (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Methods

pure :: a -> Via eff t m a #

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

liftA2 :: (a -> b -> c) -> Via eff t m a -> Via eff t m b -> Via eff t m c #

(*>) :: Via eff t m a -> Via eff t m b -> Via eff t m b #

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

MonadIO (t m) => MonadIO (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Machinery.Via

Methods

liftIO :: IO a -> Via eff t m a #

type StT (Via eff t) a Source # 
Instance details

Defined in Control.Effect.Machinery.Via

type StT (Via eff t) a = StT t a
type StM (Via eff t m) a Source # 
Instance details

Defined in Control.Effect.Machinery.Via

type StM (Via eff t m) a = ComposeSt t m a

data G Source #

This type is used as tag for all untagged effects. In order words, every effect is tagged, even untagged ones, but all the untagged ones simply have the same tag G (short for "Global", because you can view tags as some kind of namespace mechanism, and all untagged effects live in the same global namespace).

If you don't want to use tagged effects (i.e., you write effect type classes without a tag type parameter), you can ignore this type completely.