@@ -0,0 +1,35 @@
6+class MonadState s m where
10+data State s a = State (s -> Tuple s a)
12+runState s (State f) = f s
14+instance Prelude.Monad (State s) where
15+ return a = State $ \s -> Tuple s a
16+ (>>=) f g = State $ \s -> let (Tuple s1 a) = runState s f in
19+instance MonadState s (State s) where
20+ get = State (\s -> Tuple s s)
21+ put s = State (\_ -> Tuple s {})
23+modify :: forall m s. (Prelude.Monad m, MonadState s m) => (s -> s) -> m {}
28+test :: Tuple String String
29+test = runState "" $ do
30+ modify $ (++) "World!"
31+ modify $ (++) "Hello, "
34+main = Debug.Trace.print test