on master help sign in
Remove reader function
076644fAndrzej Rybczak
src/Effectful/Class/Reader.hs+1−9
@@ -14,15 +14,9 @@ import qualified Effectful.Reader as R
14-- | Compatiblity layer for a transition period from MTL-style effect handling
14-- | Compatiblity layer for a transition period from MTL-style effect handling
15-- to 'Effectful.Eff'.
15-- to 'Effectful.Eff'.
16class Monad m => MonadReader r m where
16class Monad m => MonadReader r m where
17− {-# MINIMAL (ask | reader), local #-}
18 ask :: m r
17 ask :: m r
19− ask = reader id
20−
21 local :: (r -> r) -> m a -> m a
18 local :: (r -> r) -> m a -> m a
22
19
23− reader :: (r -> a) -> m a
24− reader f = ask >>= pure . f
25−
26-- | Generic, overlappable instance.
20-- | Generic, overlappable instance.
27instance {-# OVERLAPPABLE #-}
21instance {-# OVERLAPPABLE #-}
28 ( MonadReader r m
22 ( MonadReader r m
@@ -31,12 +25,10 @@ instance {-# OVERLAPPABLE #-}
31 ) => MonadReader r (t m) where
25 ) => MonadReader r (t m) where
32 ask = lift ask
26 ask = lift ask
33 local f m = liftWith (\run -> local f (run m)) >>= restoreT . pure
27 local f m = liftWith (\run -> local f (run m)) >>= restoreT . pure
34− reader = lift . reader
35
28
36instance R.Reader r :> es => MonadReader r (Eff es) where
29instance R.Reader r :> es => MonadReader r (Eff es) where
37 ask = R.ask
30 ask = R.ask
38 local = R.local
31 local = R.local
39− reader = R.reader
40
32
41asks :: MonadReader r m => (r -> a) -> m a
33asks :: MonadReader r m => (r -> a) -> m a
42−asks = reader
34+asks f = f <$> ask
src/Effectful/Reader.hs+8−11
@@ -1,17 +1,17 @@
1−-- | The 'Reader' as an effect.
1+-- | The 'Reader' effect.
2module Effectful.Reader
2module Effectful.Reader
3 ( Reader
3 ( Reader
4 , runReader
4 , runReader
5 , ask
5 , ask
6− , local
7− , reader
8 , asks
6 , asks
7+ , local
9 ) where
8 ) where
10
9
11import Effectful.Internal.Effect
10import Effectful.Internal.Effect
12import Effectful.Internal.Monad
11import Effectful.Internal.Monad
13
12
14−-- | Provide access to a read only value of type @r@.
13+-- | Provide access to a strict (WHNF), thread local, read only value of type
14+-- @r@.
15newtype Reader r :: Effect where
15newtype Reader r :: Effect where
16 Reader :: r -> Reader r m a
16 Reader :: r -> Reader r m a
17
17
@@ -23,13 +23,10 @@ ask = do
23 IdE (Reader r) <- getEffect
23 IdE (Reader r) <- getEffect
24 pure r
24 pure r
25
25
26−local :: Reader r :> es => (r -> r) -> Eff es a -> Eff es a
27−local f = localEffect $ \(IdE (Reader r)) -> IdE (Reader (f r))
28−
29−reader :: Reader r :> es => (r -> a) -> Eff es a
26+asks :: Reader r :> es => (r -> a) -> Eff es a
30−reader f = do
27+asks f = do
31 IdE (Reader r) <- getEffect
28 IdE (Reader r) <- getEffect
32 pure $ f r
29 pure $ f r
33
30
34−asks :: Reader r :> es => (r -> a) -> Eff es a
31+local :: Reader r :> es => (r -> r) -> Eff es a -> Eff es a
35−asks = reader
32+local f = localEffect $ \(IdE (Reader r)) -> IdE (Reader (f r))