polysemy-scoped-fs-0.1.0.0: Well-typed filesystem operation effects.
Copyright(c) Hisaket VioletRed 2022
LicenseAGPL-3.0-or-later
Maintainerhisaket@outlook.jp
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Polysemy.ScopedReader

Description

This module provides a scoped-reader manner.

In contrast to a normal Reader effect, this manner makes connection of parameter type and effect explicit.

Example:

>>> import Polysemy ( interpret, runM, embed )
>>> import Polysemy.Output ( Output (Output), output, runOutputSem )
>>> :{
runDebug :: Member (Output String) r => String -> InterpreterFor (ScopedReader String (Output String)) r
runDebug = runScopedReader \i -> interpret \(Output o) -> output $ "[" <> i <> "] " <> o
:}
>>> :{
runM $ runOutputSem (embed . putStrLn) $ runDebug "root" do
    scopedReader $ output "test message 0"
    scopedLocal (<> ".scope-A") do
        scopedReader $ output "test message 1"
        scopedReader $ output "test message 2"
        scopedLocal (<> ".scope-B") do
            scopedReader $ output "test message 3"
:}
[root] test message 0
[root.scope-A] test message 1
[root.scope-A] test message 2
[root.scope-A.scope-B] test message 3

Documentation

scopedLocal :: forall i p resource effect r. Member (ScopedReader i effect) r => (i -> i) -> InterpreterFor (ScopedFix i effect) r Source #

scopedReader :: Member (ScopedReader i effect) r => Sem (effect ': r) a -> Sem r a Source #

type ScopedReader i effect = ScopedFix i effect Source #

runScopedReader :: (i -> InterpreterFor effect r) -> i -> Sem (ScopedReader i effect ': r) a -> Sem r a Source #

data ScopedFixP p resource effect m a where Source #

Constructors

ScopedEffect :: effect m a -> ScopedFixP p resource effect m a 
ScopedFix :: ScopedP p resource (ScopedFixP p resource effect) m a -> ScopedFixP p resource effect m a 

scopedEffect :: Member (ScopedFixP p resource effect) r => Sem (effect ': r) a -> Sem r a Source #

scopedFix :: Member (ScopedFixP p resource effect) r => Sem (ScopedP p resource (ScopedFixP p resource effect) ': r) a -> Sem r a Source #