effectful-0.0.0.0: A simple, yet powerful extensible effects library.
Safe HaskellNone
LanguageHaskell2010

Effectful

Synopsis

The Eff monad

data Eff (es :: [Effect]) a Source #

Instances

Instances details
IOE :> es => MonadBase IO (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

liftBase :: IO α -> Eff es α #

IOE :> es => MonadBaseControl IO (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Associated Types

type StM (Eff es) a #

Methods

liftBaseWith :: (RunInBase (Eff es) IO -> IO a) -> Eff es a #

restoreM :: StM (Eff es) a -> Eff es a #

Reader r :> es => MonadReader r (Eff es) Source # 
Instance details

Defined in Effectful.Class.Reader

Methods

ask :: Eff es r Source #

local :: (r -> r) -> Eff es a -> Eff es a Source #

reader :: (r -> a) -> Eff es a Source #

State s :> es => MonadState s (Eff es) Source # 
Instance details

Defined in Effectful.Class.State

Methods

get :: Eff es s Source #

put :: s -> Eff es () Source #

state :: (s -> (a, s)) -> Eff es a Source #

(Writer w :> es, Monoid w) => MonadWriter w (Eff es) Source # 
Instance details

Defined in Effectful.Class.Writer

Methods

writer :: (a, w) -> Eff es a Source #

tell :: w -> Eff es () Source #

listen :: Eff es a -> Eff es (a, w) Source #

Monad (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

(>>=) :: Eff es a -> (a -> Eff es b) -> Eff es b #

(>>) :: Eff es a -> Eff es b -> Eff es b #

return :: a -> Eff es a #

Functor (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

fmap :: (a -> b) -> Eff es a -> Eff es b #

(<$) :: a -> Eff es b -> Eff es a #

Applicative (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

pure :: a -> Eff es a #

(<*>) :: Eff es (a -> b) -> Eff es a -> Eff es b #

liftA2 :: (a -> b -> c) -> Eff es a -> Eff es b -> Eff es c #

(*>) :: Eff es a -> Eff es b -> Eff es b #

(<*) :: Eff es a -> Eff es b -> Eff es a #

IOE :> es => MonadIO (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

liftIO :: IO a -> Eff es a #

MonadThrow (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

throwM :: Exception e => e -> Eff es a #

MonadCatch (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

catch :: Exception e => Eff es a -> (e -> Eff es a) -> Eff es a #

MonadMask (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

mask :: ((forall a. Eff es a -> Eff es a) -> Eff es b) -> Eff es b #

uninterruptibleMask :: ((forall a. Eff es a -> Eff es a) -> Eff es b) -> Eff es b #

generalBracket :: Eff es a -> (a -> ExitCase b -> Eff es c) -> (a -> Eff es b) -> Eff es (b, c) #

(IOE :> es, Resource :> es) => MonadResource (Eff es) Source # 
Instance details

Defined in Effectful.Resource

Methods

liftResourceT :: ResourceT IO a -> Eff es a #

IOE :> es => MonadUnliftIO (Eff es) Source # 
Instance details

Defined in Effectful.Internal.Monad

Methods

withRunInIO :: ((forall a. Eff es a -> IO a) -> IO b) -> Eff es b #

type StM (Eff es) a Source # 
Instance details

Defined in Effectful.Internal.Monad

type StM (Eff es) a = a

runEff :: Eff '[] a -> IO a Source #

class (e :: Effect) :> (es :: [Effect]) Source #

Instances

Instances details
e :> es => e :> (x ': es) Source # 
Instance details

Defined in Effectful.Internal.Has

Methods

ixOf :: Int

e :> (e ': es) Source # 
Instance details

Defined in Effectful.Internal.Has

Methods

ixOf :: Int

The IO effect

data IOE Source #

runIOE :: Eff '[IOE] a -> Eff '[] a Source #

Execution of IO in effect handlers

impureEff :: (Env es -> IO a) -> Eff es a Source #

impureEff_ :: IO a -> Eff es a Source #

Helpers for defining new effects

Running

runEffect :: e -> Eff (e ': es) a -> Eff es (a, e) Source #

evalEffect :: e -> Eff (e ': es) a -> Eff es a Source #

execEffect :: e -> Eff (e ': es) a -> Eff es e Source #

Retrieval and modification

getEffect :: e :> es => Eff es e Source #

putEffect :: e :> es => e -> Eff es () Source #

stateEffect :: e :> es => (e -> (a, e)) -> Eff es a Source #

localEffect :: e :> es => (e -> e) -> Eff es a -> Eff es a Source #

listenEffect :: (e :> es, Monoid e) => Eff es a -> Eff es (a, e) Source #

readerEffectM :: e :> es => (e -> Eff es a) -> Eff es a Source #

stateEffectM :: e :> es => (e -> Eff es (a, e)) -> Eff es a Source #