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