@@ -0,0 +1,64 @@
1+{-# LANGUAGE ConstraintKinds #-}
2+{-# LANGUAGE ScopedTypeVariables #-}
3+module Control.Monad.Ether.Implicit.Writer
5+ -- * MonadWriter class
13+ -- * The Writer monad
17+ -- * The WriterT monad transformer
25+import qualified Control.Monad.Ether.Writer as Explicit
27+type MonadWriter w = Explicit.MonadWriter w w
29+writer :: forall m w a . MonadWriter w m => (a, w) -> m a
30+writer = Explicit.writer (Proxy :: Proxy w)
32+tell :: forall m w . MonadWriter w m => w -> m ()
33+tell = Explicit.tell (Proxy :: Proxy w)
35+listen :: forall m w a . MonadWriter w m => m a -> m (a, w)
36+listen = Explicit.listen (Proxy :: Proxy w)
38+pass :: forall m w a . MonadWriter w m => m (a, w -> w) -> m a
39+pass = Explicit.pass (Proxy :: Proxy w)
41+listens :: forall m w a b . MonadWriter w m => (w -> b) -> m a -> m (a, b)
42+listens = Explicit.listens (Proxy :: Proxy w)
44+censor :: forall m w a . MonadWriter w m => (w -> w) -> m a -> m a
45+censor = Explicit.censor (Proxy :: Proxy w)
47+type Writer w = Explicit.Writer w w
49+runWriter :: Writer w a -> (a, w)
50+runWriter = Explicit.runWriter Proxy
52+execWriter :: Writer w a -> w
53+execWriter = Explicit.execWriter Proxy
55+type WriterT w = Explicit.WriterT w w
57+writerT :: m (a, w) -> WriterT w m a
58+writerT = Explicit.writerT Proxy
60+runWriterT :: WriterT w m a -> m (a, w)
61+runWriterT = Explicit.runWriterT Proxy
63+execWriterT :: Monad m => WriterT w m a -> m w
64+execWriterT = Explicit.execWriterT Proxy