[Haskell-beginners] basic State Monad
Imants Cekusins
imantc at gmail.com
Sun Dec 13 17:14:29 UTC 2015
This snippet increments integer n times using state monad.
How to call:
main 10 5
module BasicState where
import Control.Monad.State.Strict
import Debug.Trace
type St a = State a a
-- caller is not aware that main uses state
-- mai is a pure function
main :: Int -> Int -> Int
main start0 repeat0 =
evalState (repeatN repeat0) start0
-- state-passing computation
repeatN :: Int -> St Int
repeatN n0 -- repeat n times
| n0 < 1 = get -- current state
| otherwise = do
withState pureStateModifier get -- update state
repeatN $ n0 - 1 -- recurse
-- state unaware modifier function
pureStateModifier :: Int -> Int
pureStateModifier = (+ 1)
More information about the Beginners
mailing list