git.iko.soy/rowtype-yoga/purescript-native
on e82e607 help sign in
48 lines 1.0 kB history raw
1module Main where
3import Prelude
5data Tuple a b = Tuple a b
7class MonadState s m where
8 get :: m s
9 put :: s -> m {}
11data State s a = State (s -> Tuple s a)
13runState s (State f) = f s
15instance functorState :: Functor (State s) where
16 (<$>) = liftM1
18instance applyState :: Apply (State s) where
19 (<*>) = ap
21instance applicativeState :: Applicative (State s) where
22 pure a = State $ \s -> Tuple s a
24instance bindState :: Bind (State s) where
25 (>>=) f g = State $ \s -> case runState s f of
26 Tuple s1 a -> runState s1 (g a)
28instance monadState :: Monad (State s)
30instance monadStateState :: MonadState s (State s) where
31 get = State (\s -> Tuple s s)
32 put s = State (\_ -> Tuple s {})
34modify :: forall m s. (Prelude.Monad m, MonadState s m) => (s -> s) -> m {}
35modify f = do
36 s <- get
37 put (f s)
39test :: Tuple String String
40test = runState "" $ do
41 modify $ (++) "World!"
42 modify $ (++) "Hello, "
43 get
45main = do
46 let t1 = test
47 Debug.Trace.trace "Done"