Random

mainの中でmkStdGenするぎりぎりまでIOモナドで包まない、ってのにチャレンジしてみた。

import Random

dice :: (RandomGen g) => g -> (Int, g)
dice g = randomR (1, 6) g 

dice_seq :: (RandomGen g) => g -> [Int]
dice_seq g = 
    let 
        first_result = dice g
    in
      (fst first_result) : map fst (iterate (dice.snd) first_result)

main = print $ take 10 $ dice_seq $ mkStdGen 1