polysemy-zoo-0.6.0.1: Experimental, user-contributed effects and interpreters for polysemy

Safe HaskellNone
LanguageHaskell2010

Polysemy.Tagged

Contents

Synopsis

Effect

newtype Tagged k e m a where Source #

An effect for annotating effects and disambiguating identical effects.

Constructors

Tagged :: forall k e m a. e m a -> Tagged k e m a 

Actions

tag :: forall k e r a. Member (Tagged k e) r => Sem (e ': r) a -> Sem r a Source #

Tag uses of an effect, effectively gaining access to the tagged effect locally.

This may be used to create tagged- variants of regular actions.

For example (the type applications aren't needed when using polysemy-plugin):

taggedLocal :: forall k i r a
             . Member (Tagged k (Reader i)) r
            => (i -> i)
            -> Sem r a
            -> Sem r a
taggedLocal f m =
  tag @k @(Reader i) $ local @i f (raise m)

Interpretations

untag :: forall k e r a. Sem (Tagged k e ': r) a -> Sem (e ': r) a Source #

Run a Tagged k e effect through reinterpreting it to e

retag :: forall k1 k2 e r a. Member (Tagged k2 e) r => Sem (Tagged k1 e ': r) a -> Sem r a Source #

Transform a Tagged k1 e effect into a Tagged k2 e effect