Copyright | (c) Hisaket VioletRed 2022 |
---|---|
License | AGPL-3.0-or-later |
Maintainer | hisaket@outlook.jp |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
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 #
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 |
type ScopedFix = ScopedFixP () Source #
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 #