StateM.hs

Plain Haskell source file: StateM.hs

module StateM (module StateM) where

newtype StateM s a   = St { unSt :: s -> (a,s) }

updSt   :: (s -> s) -> StateM s s
getSt   :: StateM s s
setSt   :: s -> StateM s s
runSt   :: s -> StateM s a -> a
runStS  :: s -> StateM s a -> (a,s)


instance Monad (StateM s) where
    return x    = St $ \s -> (x,s)
    St f >>= g  = St $ \s -> let (x,t) = f s in unSt (g x) t

instance Functor (StateM s) where
    fmap f      = (>>= return . f)


updSt f     = St $ \s -> (s, f s)
getSt       = updSt id
setSt       = updSt . const
runSt s     = fst . runStS s
runStS s    = ($ s) . unSt



Index