@@ -0,0 +1,61 @@
1+{-# LANGUAGE ConstraintKinds #-}
2+{-# LANGUAGE ScopedTypeVariables #-}
3+module Control.Monad.Ether.Implicit.State
4+ ( StateT
5+ , State
6+ , runStateT
7+ , runState
8+ , evalStateT
9+ , evalState
10+ , execStateT
11+ , execState
12+ --
13+ , MonadState
14+ , get
15+ , gets
16+ , put
17+ , state
18+ , modify
19+ ) where
20+
21+import Data.Proxy
22+import qualified Control.Monad.Ether.State as Explicit
23+
24+type StateT s = Explicit.StateT s s
25+type State s = Explicit.State s s
26+
27+runStateT :: StateT s m a -> s -> m (a, s)
28+runStateT = Explicit.runStateT Proxy
29+
30+runState :: State s a -> s -> (a, s)
31+runState = Explicit.runState Proxy
32+
33+evalStateT :: Functor m => StateT s m a -> s -> m a
34+evalStateT = Explicit.evalStateT Proxy
35+
36+evalState :: State s a -> s -> a
37+evalState = Explicit.evalState Proxy
38+
39+execStateT :: Functor m => StateT s m a -> s -> m s
40+execStateT = Explicit.execStateT Proxy
41+
42+execState :: State s a -> s -> s
43+execState = Explicit.execState Proxy
44+
45+type MonadState s = Explicit.MonadState s s
46+
47+get :: forall m s . MonadState s m => m s
48+get = Explicit.get (Proxy :: Proxy s)
49+
50+gets :: forall m s a . MonadState s m => (s -> a) -> m a
51+gets = Explicit.gets (Proxy :: Proxy s)
52+
53+put :: forall m s . MonadState s m => s -> m ()
54+put = Explicit.put (Proxy :: Proxy s)
55+
56+state :: forall m s a . MonadState s m => (s -> (a, s)) -> m a
57+state = Explicit.state (Proxy :: Proxy s)
58+
59+modify :: forall m s . MonadState s m => (s -> s) -> m ()
60+modify = Explicit.modify (Proxy :: Proxy s)
61+