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

Effectful.Internal.Monad

Description

The Eff monad.

This module is intended for internal use only, and may change without warning in subsequent releases.

Synopsis

Monad

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

Constructors

Eff 

Fields

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 #

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

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

IO

data IOE Source #

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

Helpers

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 #

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 #