polysemy-conc-0.1.1.0: Polysemy Effects for Concurrency
Safe HaskellNone
LanguageHaskell2010

Polysemy.Conc.Effect.Scoped

Description

 
Synopsis
  • data Scoped (resource :: Type) (effect :: Effect) :: Effect where
    • Run :: forall resource effect m a. resource -> effect m a -> Scoped resource effect m a
    • InScope :: forall resource effect m a. (resource -> m a) -> Scoped resource effect m a
  • 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.

Constructors

Run :: forall resource effect m a. resource -> effect m a -> Scoped resource effect m a 
InScope :: forall resource effect m a. (resource -> m a) -> Scoped resource effect m a 

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.