@@ -34,7 +34,8 @@ import Control.Monad.Trans (lift)
3434
3535import Control.Monad.Trans.Ether.Reader (ReaderT)
3636import Control.Monad.Trans.Ether.Except (ExceptT)
37−import Control.Monad.Trans.Ether.State
37+import Control.Monad.Trans.Ether.State hiding (state, get, put)
38+import qualified Control.Monad.Trans.Ether.State as S
3839
3940-- for mtl instances
4041import qualified Control.Monad.Trans.Cont as Trans (ContT)
@@ -54,97 +55,98 @@ class Monad m => MonadState tag s m | m tag -> s where
5455
5556 -- | Return the state from the internals of the monad.
5657 get :: proxy tag -> m s
57− get proxy = state proxy (\s -> (s, s))
58+ get t = state t (\s -> (s, s))
5859
5960 -- | Replace the state inside the monad.
6061 put :: proxy tag -> s -> m ()
61− put proxy s = state proxy (\_ -> ((), s))
62+ put t s = state t (\_ -> ((), s))
6263
6364 -- | Embed a simple state action into the monad.
6465 state :: proxy tag -> (s -> (a, s)) -> m a
65− state proxy f = do
66− s <- get proxy
66+ state t f = do
67+ s <- get t
6768 let ~(a, s') = f s
68− put proxy s'
69+ put t s'
6970 return a
7071
7172-- | Modifies the state inside a state monad.
7273modify :: MonadState tag s m => proxy tag -> (s -> s) -> m ()
73−modify proxy f = state proxy $ \ s -> ((), f s)
74+modify t f = state t (\s -> ((), f s))
7475
7576-- | Gets specific component of the state, using a projection function supplied.
7677gets :: MonadState tag s m => proxy tag -> (s -> a) -> m a
77−gets proxy f = fmap f (get proxy)
78+gets t f = fmap f (get t)
7879
7980instance {-# OVERLAPPING #-} Monad m => MonadState tag s (StateT tag s m) where
80− get proxy = stateT proxy (\s -> return (s, s))
81− put proxy s = stateT proxy (\_ -> return ((), s))
81+ get = S.get
82+ put = S.put
83+ state = S.state
8284
8385instance MonadState tag s m => MonadState tag s (StateT tag' s' m) where
84− get proxy = lift (get proxy)
85− put proxy = lift . put proxy
86− state proxy = lift . state proxy
86+ get t = lift (get t)
87+ put t = lift . put t
88+ state t = lift . state t
8789
8890-- Instances for other tagged transformers
8991
9092instance (MonadState tag s m) => MonadState tag s (ReaderT tag' r m) where
91− get proxy = lift (get proxy)
92− put proxy = lift . put proxy
93− state proxy = lift . state proxy
93+ get t = lift (get t)
94+ put t = lift . put t
95+ state t = lift . state t
9496
9597instance (MonadState tag s m) => MonadState tag s (ExceptT tag' e m) where
96− get proxy = lift (get proxy)
97− put proxy = lift . put proxy
98− state proxy = lift . state proxy
98+ get t = lift (get t)
99+ put t = lift . put t
100+ state t = lift . state t
99101
100102-- Instances for mtl transformers
101103
102104instance MonadState tag s m => MonadState tag s (Trans.ContT r m) where
103− get proxy = lift (get proxy)
104− put proxy = lift . put proxy
105− state proxy = lift . state proxy
105+ get t = lift (get t)
106+ put t = lift . put t
107+ state t = lift . state t
106108
107109instance MonadState tag s m => MonadState tag s (Trans.ExceptT e m) where
108− get proxy = lift (get proxy)
109− put proxy = lift . put proxy
110− state proxy = lift . state proxy
110+ get t = lift (get t)
111+ put t = lift . put t
112+ state t = lift . state t
111113
112114instance MonadState tag s m => MonadState tag s (Trans.IdentityT m) where
113− get proxy = lift (get proxy)
114− put proxy = lift . put proxy
115− state proxy = lift . state proxy
115+ get t = lift (get t)
116+ put t = lift . put t
117+ state t = lift . state t
116118
117119instance MonadState tag s m => MonadState tag s (Trans.ListT m) where
118− get proxy = lift (get proxy)
119− put proxy = lift . put proxy
120− state proxy = lift . state proxy
120+ get t = lift (get t)
121+ put t = lift . put t
122+ state t = lift . state t
121123
122124instance MonadState tag s m => MonadState tag s (Trans.MaybeT m) where
123− get proxy = lift (get proxy)
124− put proxy = lift . put proxy
125− state proxy = lift . state proxy
125+ get t = lift (get t)
126+ put t = lift . put t
127+ state t = lift . state t
126128
127129instance MonadState tag s m => MonadState tag s (Trans.ReaderT r m) where
128− get proxy = lift (get proxy)
129− put proxy = lift . put proxy
130− state proxy = lift . state proxy
130+ get t = lift (get t)
131+ put t = lift . put t
132+ state t = lift . state t
131133
132134instance MonadState tag s m => MonadState tag s (Trans.Lazy.StateT s' m) where
133− get proxy = lift (get proxy)
134− put proxy = lift . put proxy
135− state proxy = lift . state proxy
135+ get t = lift (get t)
136+ put t = lift . put t
137+ state t = lift . state t
136138
137139instance MonadState tag s m => MonadState tag s (Trans.Strict.StateT s' m) where
138− get proxy = lift (get proxy)
139− put proxy = lift . put proxy
140− state proxy = lift . state proxy
140+ get t = lift (get t)
141+ put t = lift . put t
142+ state t = lift . state t
141143
142144instance (Monoid w, MonadState tag s m) => MonadState tag s (Trans.Lazy.WriterT w m) where
143− get proxy = lift (get proxy)
144− put proxy = lift . put proxy
145− state proxy = lift . state proxy
145+ get t = lift (get t)
146+ put t = lift . put t
147+ state t = lift . state t
146148
147149instance (Monoid w, MonadState tag s m) => MonadState tag s (Trans.Strict.WriterT w m) where
148− get proxy = lift (get proxy)
149− put proxy = lift . put proxy
150− state proxy = lift . state proxy
150+ get t = lift (get t)
151+ put t = lift . put t
152+ state t = lift . state t