module Terminal.Game.Random ( R.StdGen,
R.UniformRange,
R.getStdGen,
R.mkStdGen,
getRandom,
pickRandom )
where
import System.Random as R
getRandom :: UniformRange a => (a, a) -> StdGen -> (a, StdGen)
getRandom :: (a, a) -> StdGen -> (a, StdGen)
getRandom (a, a)
bs StdGen
sg = (a, a) -> StdGen -> (a, StdGen)
forall g a. (RandomGen g, UniformRange a) => (a, a) -> g -> (a, g)
uniformR (a, a)
bs StdGen
sg
pickRandom :: [a] -> StdGen -> (a, StdGen)
pickRandom :: [a] -> StdGen -> (a, StdGen)
pickRandom [a]
as StdGen
sg = let l :: Int
l = [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
as
(Int
a, StdGen
sg') = (Int, Int) -> StdGen -> (Int, StdGen)
forall a. UniformRange a => (a, a) -> StdGen -> (a, StdGen)
getRandom (Int
0, Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1) StdGen
sg
in ([a]
as [a] -> Int -> a
forall a. [a] -> Int -> a
!! Int
a, StdGen
sg')