Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Strict write-only state
- data Writer w v = Writer !w v
- tell :: Member (Writer w) r => w -> Eff r ()
- censor :: forall w a r. Member (Writer w) r => (w -> w) -> Eff r a -> Eff r a
- runWriter :: (w -> b -> b) -> b -> Eff (Writer w ': r) a -> Eff r (a, b)
- runFirstWriter :: Eff (Writer w ': r) a -> Eff r (a, Maybe w)
- runLastWriter :: Eff (Writer w ': r) a -> Eff r (a, Maybe w)
- runListWriter :: Eff (Writer w ': r) a -> Eff r (a, [w])
- runMonoidWriter :: Monoid w => Eff (Writer w ': r) a -> Eff r (a, w)
Documentation
The Writer monad
In MTL's Writer monad, the told value must have a |Monoid| type. Our writer has no such constraints. If we write a |Writer|-like interpreter to accumulate the told values in a monoid, it will have the |Monoid w| constraint then
Writer !w v |
censor :: forall w a r. Member (Writer w) r => (w -> w) -> Eff r a -> Eff r a Source #
Transform the state being produced.
runWriter :: (w -> b -> b) -> b -> Eff (Writer w ': r) a -> Eff r (a, b) Source #
Handle Writer requests, using a user-provided function to accumulate values, hence no Monoid constraints.
runFirstWriter :: Eff (Writer w ': r) a -> Eff r (a, Maybe w) Source #
Handle Writer requests by taking the first value provided.
runLastWriter :: Eff (Writer w ': r) a -> Eff r (a, Maybe w) Source #
Handle Writer requests by overwriting previous values.