@@ -2,6 +2,7 @@ module Control.Monad.Writer
3import Builtins
3import Builtins
4import Control.Monad.Identity
4import Control.Monad.Identity
5+import Control.Monad.Trans
6%access public
7%access public
@@ -44,6 +45,10 @@ instance (Monoid w, Monad m) => MonadWriter w (WriterT w m) where
44 pass (WR m) = WR $ do ((a, f), w) <- m
45 pass (WR m) = WR $ do ((a, f), w) <- m
45 return (a, f w)
46 return (a, f w)
48+instance Monoid w => MonadTrans (WriterT w) where
49+ lift x = WR $ do r <- x
47||| Run an action in the Writer monad and transform the written output
52||| Run an action in the Writer monad and transform the written output
48listens : MonadWriter w m => (w -> b) -> m a -> m (a, b)
53listens : MonadWriter w m => (w -> b) -> m a -> m (a, b)
49listens f m = listens' f (listen m) where
54listens f m = listens' f (listen m) where