on master help sign in
Implicit Writer
commit3e153c6e51f58e4a72243e2a2878aa66531679b5 authorIndex Int <vlad.z.4096@gmail.com> dateSat 13 Jun 2015, 02:13 (11 years ago) parentfa604ac
3 files changed+66−1
ether.cabal+1 src/Control/Monad/Ether/Implicit/Except.hs+1−1 src/Control/Monad/Ether/Implicit/Writer.hs+64
ether.cabal+1
@@ -35,6 +35,7 @@ library
3535 Control.Monad.Ether.State
3636 Control.Monad.Ether.Except
3737 Control.Monad.Ether.Implicit.Reader
38+ Control.Monad.Ether.Implicit.Writer
3839 Control.Monad.Ether.Implicit.State
3940 Control.Monad.Ether.Implicit.Except
4041 Control.Monad.Ether.Implicit.Except.TH
src/Control/Monad/Ether/Implicit/Except.hs+1−1
@@ -26,7 +26,7 @@ throw = Explicit.throw (Proxy :: Proxy e)
2626catch :: forall e m a . MonadExcept e m => m a -> (e -> m a) -> m a
2727catch = Explicit.catch (Proxy :: Proxy e)
2828
29−type Except e = Explicit.Except e e
29+type Except e = Explicit.Except e e
3030
3131runExcept :: Except e a -> Either e a
3232runExcept = Explicit.runExcept Proxy
src/Control/Monad/Ether/Implicit/Writer.hsnew file+64
@@ -0,0 +1,64 @@
1+{-# LANGUAGE ConstraintKinds #-}
2+{-# LANGUAGE ScopedTypeVariables #-}
3+module Control.Monad.Ether.Implicit.Writer
4+ (
5+ -- * MonadWriter class
6+ MonadWriter
7+ , writer
8+ , tell
9+ , listen
10+ , pass
11+ , listens
12+ , censor
13+ -- * The Writer monad
14+ , Writer
15+ , runWriter
16+ , execWriter
17+ -- * The WriterT monad transformer
18+ , WriterT
19+ , writerT
20+ , runWriterT
21+ , execWriterT
22+ ) where
23+
24+import Data.Proxy
25+import qualified Control.Monad.Ether.Writer as Explicit
26+
27+type MonadWriter w = Explicit.MonadWriter w w
28+
29+writer :: forall m w a . MonadWriter w m => (a, w) -> m a
30+writer = Explicit.writer (Proxy :: Proxy w)
31+
32+tell :: forall m w . MonadWriter w m => w -> m ()
33+tell = Explicit.tell (Proxy :: Proxy w)
34+
35+listen :: forall m w a . MonadWriter w m => m a -> m (a, w)
36+listen = Explicit.listen (Proxy :: Proxy w)
37+
38+pass :: forall m w a . MonadWriter w m => m (a, w -> w) -> m a
39+pass = Explicit.pass (Proxy :: Proxy w)
40+
41+listens :: forall m w a b . MonadWriter w m => (w -> b) -> m a -> m (a, b)
42+listens = Explicit.listens (Proxy :: Proxy w)
43+
44+censor :: forall m w a . MonadWriter w m => (w -> w) -> m a -> m a
45+censor = Explicit.censor (Proxy :: Proxy w)
46+
47+type Writer w = Explicit.Writer w w
48+
49+runWriter :: Writer w a -> (a, w)
50+runWriter = Explicit.runWriter Proxy
51+
52+execWriter :: Writer w a -> w
53+execWriter = Explicit.execWriter Proxy
54+
55+type WriterT w = Explicit.WriterT w w
56+
57+writerT :: m (a, w) -> WriterT w m a
58+writerT = Explicit.writerT Proxy
59+
60+runWriterT :: WriterT w m a -> m (a, w)
61+runWriterT = Explicit.runWriterT Proxy
62+
63+execWriterT :: Monad m => WriterT w m a -> m w
64+execWriterT = Explicit.execWriterT Proxy