git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
MonadState example
commiteb2ce6572a1769083240d023d45cfc1d13ab4f2e authorPhil Freeman <paf31@cantab.net> dateFri 21 Feb 2014, 20:18 (13 years ago) parent9420ad3
1 file changed+35
examples/passing/MonadState.purs+35
examples/passing/MonadState.pursnew file+35
@@ -0,0 +1,35 @@
1+module Main where
2+
3+import Prelude
4+import Data.Tuple
5+
6+class MonadState s m where
7+ get :: m s
8+ put :: s -> m {}
9+
10+data State s a = State (s -> Tuple s a)
11+
12+runState s (State f) = f s
13+
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
17+ runState s1 (g a)
18+
19+instance MonadState s (State s) where
20+ get = State (\s -> Tuple s s)
21+ put s = State (\_ -> Tuple s {})
22+
23+modify :: forall m s. (Prelude.Monad m, MonadState s m) => (s -> s) -> m {}
24+modify f = do
25+ s <- get
26+ put (f s)
27+
28+test :: Tuple String String
29+test = runState "" $ do
30+ modify $ (++) "World!"
31+ modify $ (++) "Hello, "
32+ get
33+
34+main = Debug.Trace.print test
35+