@@ -0,0 +1,79 @@
1+{-# LANGUAGE AllowAmbiguousTypes #-}
2+{-# LANGUAGE ScopedTypeVariables #-}
3+{-# LANGUAGE MagicHash #-}
4+
5+-- | See "Control.Monad.Ether.State.Strict".
6+
7+module Control.Monad.Ether.Ambiguous.State.Strict
8+ (
9+ -- * MonadState class
10+ MonadState
11+ , get
12+ , put
13+ , state
14+ , modify
15+ , gets
16+ -- * The State monad
17+ , State
18+ , runState
19+ , evalState
20+ , execState
21+ -- * The StateT monad transformer
22+ , StateT
23+ , stateT
24+ , runStateT
25+ , evalStateT
26+ , execStateT
27+ ) where
28+
29+import GHC.Prim (Proxy#, proxy#)
30+import Control.Monad.Ether.State.Strict (MonadState, StateT, State)
31+import qualified Control.Monad.Ether.State.Strict as Explicit
32+
33+-- | See 'Control.Monad.Ether.State.Strict.stateT'.
34+stateT :: forall tag s m a . (s -> m (a, s)) -> StateT tag s m a
35+stateT = Explicit.stateT proxy#
36+
37+-- | See 'Control.Monad.Ether.State.Strict.runStateT'.
38+runStateT :: forall tag s m a . StateT tag s m a -> s -> m (a, s)
39+runStateT = Explicit.runStateT proxy#
40+
41+-- | See 'Control.Monad.Ether.State.Strict.runState'.
42+runState :: forall tag s a . State tag s a -> s -> (a, s)
43+runState = Explicit.runState proxy#
44+
45+-- | See 'Control.Monad.Ether.State.Strict.evalStateT'.
46+evalStateT :: forall tag s m a . Monad m => StateT tag s m a -> s -> m a
47+evalStateT = Explicit.evalStateT proxy#
48+
49+-- | See 'Control.Monad.Ether.State.Strict.evalState'.
50+evalState :: forall tag s a . State tag s a -> s -> a
51+evalState = Explicit.evalState proxy#
52+
53+-- | See 'Control.Monad.Ether.State.Strict.execStateT'.
54+execStateT :: forall tag s m a . Monad m => StateT tag s m a -> s -> m s
55+execStateT = Explicit.execStateT proxy#
56+
57+-- | See 'Control.Monad.Ether.State.Strict.execState'.
58+execState :: forall tag s a . State tag s a -> s -> s
59+execState = Explicit.execState proxy#
60+
61+-- | See 'Control.Monad.Ether.State.Strict.get'.
62+get :: forall tag s m . MonadState tag s m => m s
63+get = Explicit.get (proxy# :: Proxy# tag)
64+
65+-- | See 'Control.Monad.Ether.State.Strict.gets'.
66+gets :: forall tag s m a . MonadState tag s m => (s -> a) -> m a
67+gets = Explicit.gets (proxy# :: Proxy# tag)
68+
69+-- | See 'Control.Monad.Ether.State.Strict.put'.
70+put :: forall tag s m . MonadState tag s m => s -> m ()
71+put = Explicit.put (proxy# :: Proxy# tag)
72+
73+-- | See 'Control.Monad.Ether.State.Strict.state'.
74+state :: forall tag s m a . MonadState tag s m => (s -> (a, s)) -> m a
75+state = Explicit.state (proxy# :: Proxy# tag)
76+
77+-- | See 'Control.Monad.Ether.State.Strict.modify'.
78+modify :: forall tag s m . MonadState tag s m => (s -> s) -> m ()
79+modify = Explicit.modify (proxy# :: Proxy# tag)