on master help sign in
Remove writer function
b9c42c9Andrzej Rybczak
src/Effectful/Class/Writer.hs−11
@@ -11,16 +11,7 @@ import qualified Effectful.Writer.Dynamic as W
11-- | Compatiblity layer for a transition period from MTL-style effect handling
11-- | Compatiblity layer for a transition period from MTL-style effect handling
12-- to 'Effectful.Eff'.
12-- to 'Effectful.Eff'.
13class Monad m => MonadWriter w m where
13class Monad m => MonadWriter w m where
14− {-# MINIMAL (writer | tell), listen #-}
15−
16− writer :: (a, w) -> m a
17− writer (a, w) = do
18− tell w
19− pure a
20−
21 tell :: w -> m ()
14 tell :: w -> m ()
22− tell w = writer ((), w)
23−
24 listen :: m a -> m (a, w)
15 listen :: m a -> m (a, w)
25
16
26-- | Generic, overlappable instance.
17-- | Generic, overlappable instance.
@@ -29,14 +20,12 @@ instance {-# OVERLAPPABLE #-}
29 , MonadTransControl t
20 , MonadTransControl t
30 , Monad (t m)
21 , Monad (t m)
31 ) => MonadWriter w (t m) where
22 ) => MonadWriter w (t m) where
32− writer = lift . writer
33 tell = lift . tell
23 tell = lift . tell
34 listen m = do
24 listen m = do
35 (stT, w) <- liftWith $ \run -> listen (run m)
25 (stT, w) <- liftWith $ \run -> listen (run m)
36 (, w) <$> restoreT (pure stT)
26 (, w) <$> restoreT (pure stT)
37
27
38instance (W.Writer w :> es, Monoid w) => MonadWriter w (Eff es) where
28instance (W.Writer w :> es, Monoid w) => MonadWriter w (Eff es) where
39− writer = W.writer
40 tell = W.tell
29 tell = W.tell
41 listen = W.listen
30 listen = W.listen
42
31
src/Effectful/Writer.hs−4
@@ -3,7 +3,6 @@ module Effectful.Writer
3 ( Writer
3 ( Writer
4 , runWriter
4 , runWriter
5 , execWriter
5 , execWriter
6− , writer
7 , tell
6 , tell
8 , listen
7 , listen
9 , listens
8 , listens
@@ -30,9 +29,6 @@ execWriter m = do
30 IdE (Writer w) <- execEffect (IdE (Writer mempty)) m
29 IdE (Writer w) <- execEffect (IdE (Writer mempty)) m
31 pure w
30 pure w
32
31
33−writer :: (Writer w :> es, Monoid w) => (a, w) -> Eff es a
34−writer (a, w) = stateEffect $ \(IdE (Writer w0)) -> (a, IdE (Writer (w0 <> w)))
35−
36tell :: (Writer w :> es, Monoid w) => w -> Eff es ()
32tell :: (Writer w :> es, Monoid w) => w -> Eff es ()
37tell w = stateEffect $ \(IdE (Writer w0)) -> ((), IdE (Writer (w0 <> w)))
33tell w = stateEffect $ \(IdE (Writer w0)) -> ((), IdE (Writer (w0 <> w)))
38
34
src/Effectful/Writer/Dynamic.hs−7
@@ -10,7 +10,6 @@ module Effectful.Writer.Dynamic
10 , execWriterMVar
10 , execWriterMVar
11
11
12 -- * Operations
12 -- * Operations
13− , writer
14 , tell
13 , tell
15 , listen
14 , listen
16 , listens
15 , listens
@@ -24,7 +23,6 @@ import qualified Effectful.Writer as WP
24import qualified Effectful.Writer.MVar as WM
23import qualified Effectful.Writer.MVar as WM
25
24
26data Writer w :: Effect where
25data Writer w :: Effect where
27− Writer :: (a, w) -> Writer w m a
28 Tell :: ~w -> Writer w m ()
26 Tell :: ~w -> Writer w m ()
29 Listen :: m a -> Writer w m (a, w)
27 Listen :: m a -> Writer w m (a, w)
30
28
@@ -43,7 +41,6 @@ writerPure
43 -> Writer w (Eff es) a
41 -> Writer w (Eff es) a
44 -> Eff localEs a
42 -> Eff localEs a
45writerPure run = \case
43writerPure run = \case
46− Writer aw -> WP.writer aw
47 Tell w -> WP.tell w
44 Tell w -> WP.tell w
48 Listen m -> WP.listen (run m)
45 Listen m -> WP.listen (run m)
49
46
@@ -62,16 +59,12 @@ writerMVar
62 -> Writer w (Eff es) a
59 -> Writer w (Eff es) a
63 -> Eff localEs a
60 -> Eff localEs a
64writerMVar run = \case
61writerMVar run = \case
65− Writer aw -> WM.writer aw
66 Tell w -> WM.tell w
62 Tell w -> WM.tell w
67 Listen m -> WM.listen (run m)
63 Listen m -> WM.listen (run m)
68
64
69----------------------------------------
65----------------------------------------
70-- Operations
66-- Operations
71
67
72−writer :: (Writer w :> es, Monoid w) => (a, w) -> Eff es a
73−writer = send . Writer
74−
75tell :: (Writer w :> es, Monoid w) => w -> Eff es ()
68tell :: (Writer w :> es, Monoid w) => w -> Eff es ()
76tell = send . Tell
69tell = send . Tell
77
70
src/Effectful/Writer/MVar.hs−6
@@ -2,7 +2,6 @@ module Effectful.Writer.MVar
2 ( Writer
2 ( Writer
3 , runWriter
3 , runWriter
4 , execWriter
4 , execWriter
5− , writer
6 , tell
5 , tell
7 , listen
6 , listen
8 , listens
7 , listens
@@ -31,11 +30,6 @@ execWriter m = do
31 _ <- evalEffect (IdE (Writer v)) m
30 _ <- evalEffect (IdE (Writer v)) m
32 unsafeEff_ $ readMVar v
31 unsafeEff_ $ readMVar v
33
32
34−writer :: (Writer w :> es, Monoid w) => (a, w) -> Eff es a
35−writer (a, w1) = do
36− IdE (Writer v) <- getEffect
37− unsafeEff_ . modifyMVar v $ \w0 -> let w = w0 <> w1 in w `seq` pure (w, a)
38−
39tell :: (Writer w :> es, Monoid w) => w -> Eff es ()
33tell :: (Writer w :> es, Monoid w) => w -> Eff es ()
40tell w1 = do
34tell w1 = do
41 IdE (Writer v) <- getEffect
35 IdE (Writer v) <- getEffect