
13 Dec
2015
13 Dec
'15
12:14 p.m.
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)