effectful-core
Safe HaskellSafe-Inferred
LanguageGHC2021

Effectful.Labeled.Reader

Description

Convenience functions for the Labeled Reader effect.

Since: 2.4.0.0

Synopsis

Effect

data Reader r :: Effect where Source #

Constructors

Ask :: Reader r m r 
Local :: (r -> r) -> m a -> Reader r m a 

Instances

Instances details
type DispatchOf (Reader r) Source # 
Instance details

Defined in Effectful.Internal.Effect.Dynamic

Handlers

runReader Source #

Arguments

:: forall label r es a. HasCallStack 
=> r

The initial environment.

-> Eff (Labeled label (Reader r) : es) a 
-> Eff es a 

Run the Reader effect with the given initial environment (via Effectful.Reader.Static).

Operations

ask :: forall label r es. (HasCallStack, Labeled label (Reader r) :> es) => Eff es r Source #

Fetch the value of the environment.

asks Source #

Arguments

:: forall label r es a. (HasCallStack, Labeled label (Reader r) :> es) 
=> (r -> a)

The function to apply to the environment.

-> Eff es a 

Retrieve a function of the current environment.

asks f ≡ f <$> ask

local Source #

Arguments

:: forall label r es a. (HasCallStack, Labeled label (Reader r) :> es) 
=> (r -> r)

The function to modify the environment.

-> Eff es a 
-> Eff es a 

Execute a computation in a modified environment.

runReader r (local f m) ≡ runReader (f r) m

Re-exports

newtype Labeled (label :: k) (e :: Effect) :: Effect where Source #

Assign a label to an effect.

Note: labeled effects are best used together with the effectful-plugin package, as it significantly improves their usability.

The constructor is for sending labeled operations of a dynamically dispatched effect to the handler:

>>> import Effectful.Dispatch.Dynamic
>>> :{
  data X :: Effect where
    X :: X m Int
  type instance DispatchOf X = Dynamic
:}
>>> :{
  runPureEff . runLabeled @"x" (interpret_ $ \X -> pure 333) $ do
    send $ Labeled @"x" X
:}
333

Constructors

Labeled :: forall label e m a. e m a -> Labeled label e m a

Since: 2.4.0.0

Instances

Instances details
type DispatchOf (Labeled label e) Source # 
Instance details

Defined in Effectful.Labeled

type DispatchOf (Labeled label e) = DispatchOf e
data StaticRep (Labeled label e) Source # 
Instance details

Defined in Effectful.Labeled

data StaticRep (Labeled label e)