Random integer generating in Haskell

351 views Asked by At

Is there any inbuilt function in Haskell that gives a random number in a range like

x = random(a,b) such that x gives an integer lies between a and b .

a <= x <= b

And some functions in Haskell gives same number when I executes multiple times .

Thank you in advance :) .

1

There are 1 answers

0
dnaq On

There is one called randomR in System.Random. If we look at it's type signature:

randomR :: (RandomGen g, Random a) => (a, a) -> g -> (a, g)

and specialise it to Integer we get

randomR :: (RandomGen g) => (Integer, Integer) -> g -> (Integer, g)

so this is a function that given a low and hi, and a random number generator returns a random Integer and a new random generator. This makes sense, since Haskell is a pure language, calling randomR with the same random generator will always return the same result.

So how can we use this in a program?, We'll need a random number generator to start with. The easiest way is to use either mkStdGen :: Int -> StdGen to create a random number generator from a seed, or to use newStdGen :: IO StdGen to return the system random number generator.