Skip to content

Instantly share code, notes, and snippets.

@SkyBirdSoar

SkyBirdSoar/.hs Secret

Last active October 8, 2015 07:30
Show Gist options
  • Save SkyBirdSoar/a604e40acf661d4e6212 to your computer and use it in GitHub Desktop.
Save SkyBirdSoar/a604e40acf661d4e6212 to your computer and use it in GitHub Desktop.
rollDie :: State StdGen Int
rollDie = do
generator <- get
let (value, newGenerator) = randomR (1,6) generator
put newGenerator
return value
rollDie = get >>=
-- pr@(St (\st -> (st, st))) >>= f
-- -- St $ \st ->
-- -- let (st, st) = runState pr st
-- -- -- (\st -> (st, st)) st -- get's runState is \st -> (st, st)
-- -- in runState (f st) st
-- -- -- chunk below[1]...
-- -- -- (\st -> (value, st)) st
--[1] f st
\generator ->
let (value, newGenerator) = randomR (1,6) generator
in put newGenerator >> return value
-- -- St (\newGenerator -> ((), newGenerator) >> St (\st -> (value, st))
-- -- -- _putState >>= \_ -> St (\st -> (value, st))
-- -- -- -- St $ \st ->
-- -- -- -- let (v, st') = runState _putState st -- Note: v = (), st' = st
-- -- -- -- in runState (f v) st' -- v is ignored by the lambda f
-- -- -- -- -- in runState (St (\st' -> (value, st'))) st
-- -- -- -- -- -- in (value, st')
-- -- -- -- St $ \st -> (value, st')
-- Therefore, rollDie evaluates to St $ \st -> (value, st')
main = print $ runState (rollDie >> rollDie) getStdGen
-- -- (rollDie >>= \_ -> rollDie)
-- -- pr@(St $ \st -> (v1, st) >>= \_ -> rollDie
-- -- -- St $ \st' ->
-- -- -- let (v2, st'') = runState pr st'
-- -- -- in runState rollDie st''
-- -- -- -- in St $ (\st'' -> {- do stuff in \generator lambda -} (value, st''') st''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment