effects-0.2: src/Control/Effects/Writer.hs
{-# LANGUAGE FlexibleContexts #-}
module Control.Effects.Writer where
import Control.Effects
import Data.Monoid
tell :: (AutoLift (w, r) m n, Monoid w) => Effect (w, r) m -> w -> n ()
tell p v = operation p $ \k -> do
~(w, r) <- k ()
return (mappend v w, r)
writer :: (Monad m, Monoid w) => Handler (w, a) (w, a) m a
writer = Handler
{ ret = \a -> return (mempty, a)
, fin = return
}