Skip to content

Instantly share code, notes, and snippets.



Created Jul 22, 2016
What would you like to do?
State monad does not force ordering
import Control.Monad.State (execState, get, modify)
import Debug.Trace (trace)
foo :: IO ()
foo = do
(x, y) <- pure $ flip execState (1,1) $ do
(x, y) <- get
modify (\(x, y) -> (trace "x1" (x+1), (trace "y1" y)))
(x, y) <- get
modify (\(x, y) -> (trace "x2" x, trace "y2" (y*3)))
print y
print x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment