#!/usr/bin/runghc -- These methods are PRNG for statistics, not cryptography module RandomExample where import System.Random main :: IO () main = do -- Single item, ranged singleIntRange <- randomRIO (1, 10) :: IO Int print singleIntRange singleFloatRange <- randomRIO (1, 10) :: IO Float print singleFloatRange singleCharRange <- randomRIO ('a', 'z') :: IO Char print singleCharRange -- Single item, default range bounds singleIntDefault <- randomIO :: IO Int print singleIntDefault singleCharDefault <- randomIO :: IO Char print singleCharDefault -- Single item, ranged rollDice <- getStdRandom (randomR ('a', 'z')) print rollDice rollDice2 <- getStdRandom (randomR (1, 10 :: Int)) print rollDice2 -- Single item, default range rollDiceInt <- getStdRandom random :: IO Int print rollDiceInt rollDice2Char <- getStdRandom random :: IO Char print rollDice2Char -- You can choose the seed: s1 <- getStdGen let (i1, s2) = randomR (0, 100 :: Int) s1 -- The seed is passed, then chained: let (i2, s3) = randomR (0, 100) s2 :: (Float, StdGen) -- Default range let (i3, s4) = random s3 :: (Int, StdGen) putStrLn $ show i1 ++ ", " ++ show i2 ++ ", " ++ show i3 -- Using a seed, generate list of ranged ints, ranged let randList = take 20 $ randomRs (0, 99 :: Int) s4 print randList -- Generate list of ranged Chars, default range putStrLn $ take 20 (randomRs ('a', 'z') s4) -- You can choose the seed alternatively: let rs = mkStdGen 42 let randFloats = take 20 $ randoms rs :: [Float] print randFloats