import Control.Monad.State.Strict -- if the state is even, divide it by 2 and add num, otherwise just add num stateChange :: Int -> Int -> Int stateChange num state | even state = ( state ` div ` 2 ) + num | otherwise = state + num stateExample :: Int -> State Int Int stateExample 0 = get stateExample n = modify ( stateChange n ) >> stateExample ( n - 1 ) main :: IO () main = print ( execState ( stateExample 50000000 ) 0 ) stateChange :: Int -> Int -> Int stateChange num state | even state = ( state ` div ` 2 ) + num | otherwise = state + num stateExample' :: Int -> Int -> Int stateExample' state 0 = state stateExample' state n = stateExample' ( stateChange n state ) ( n - 1 ) main :: IO () main = print ( stateExample' 0 50000000 ) The same thing was happening in the Echidna memory issue…