StateモナドとContinuationモナド
30分プログラム、その70。
StateモナドとContinuationモナドを勉強しよう。
import Control.Monad.State import Control.Monad.Cont randomUpdate :: Int->Int->Int->(Int,Int) randomUpdate p q a = let value = a*p+q in (value,value `mod` 1000) random :: State Int Int random = do seed <- get let (value,seed') = randomUpdate 3 10 seed put seed' return value run = fst $ runState f 10 where f = do a <- random b <- random c <- random return [a,b,c] ccTest n = runCont f id where f = do str <- callCC $ \ret-> do when(n<10) (ret "small than 10") return "over 10" return str
All About Monadsを写しただけな気がする。
Stateモナドはともかく、Continuationモナドはなんとなくしかわかんない。
という動機だったんだけど、今考えるとListモナドでいいような気がしてきた。