Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data Scoped (resource :: Type) (effect :: Effect) :: Effect where
- scoped :: forall resource effect r. Member (Scoped resource effect) r => InterpreterFor effect r
- runScoped :: forall resource effect r. (forall x. (resource -> Sem r x) -> Sem r x) -> (resource -> InterpreterFor effect r) -> InterpreterFor (Scoped resource effect) r
- runScopedAs :: forall resource effect r. Sem r resource -> (resource -> InterpreterFor effect r) -> InterpreterFor (Scoped resource effect) r
Documentation
data Scoped (resource :: Type) (effect :: Effect) :: Effect where Source #
Scoped
transforms a program so that effect
is associated with a resource
within that program.
This requires the interpreter for effect
to be parameterized by resource
and constructed for every program using
Scoped
separately.
An application for this is Events
, in which each program using the effect Consume
is interpreted
with its own copy of the event channel; or a database transaction, in which a transaction handle is created for the
wrapped program and passed to the interpreter for the database effect.
Resource creation is performed by the function passed to runScoped
.
The constructors are not intended to be used directly; the smart constructor scoped
is used like a local
interpreter for effect
.
scoped :: forall resource effect r. Member (Scoped resource effect) r => InterpreterFor effect r Source #
Constructor for Scoped
, taking a nested program and transforming all instances of effect
to
Scoped resource effect
.
runScoped :: forall resource effect r. (forall x. (resource -> Sem r x) -> Sem r x) -> (resource -> InterpreterFor effect r) -> InterpreterFor (Scoped resource effect) r Source #
Interpreter for Scoped
, taking a resource
allocation function and a parameterized interpreter for the plain
effect
.
scope
is a callback function, allowing the user to compute the resource for each program from other effects.
scopedInterpreter
is a regular interpreter that is called with the resource
argument produced by scope
.
runScopedAs :: forall resource effect r. Sem r resource -> (resource -> InterpreterFor effect r) -> InterpreterFor (Scoped resource effect) r Source #
Variant of Scoped
in which the resource allocator is a plain action.