module GameRandom
(randomRange) where
import System.Random
import qualified Data.Set as S
type Count = Int
type UpperLimit = Int
type RandomSet = S.Set Int
-- | Generate `Count` size Int list.
randomRange :: Count -> UpperLimit -> IO [Int]
randomRange c u = do
rs <- genNewRandom c u (S.fromList [])
return (S.toList rs)
genNewRandom :: Count -> UpperLimit -> RandomSet -> IO RandomSet
genNewRandom c u rs
| S.size rs == c = return rs
| otherwise = do
i <- getRandom u
genNewRandom c u (S.insert i rs)
getRandom :: UpperLimit -> IO Int
getRandom ul = getStdRandom (randomR (1,ul))