A few days ago I had to randomly choose and element of a list and continue execution, so here&#39;s what I did:<br><br>I made a infinite list of Random numbers [Int] (Not IO [Int]) and I passed it around all the time in a Tuple and whenever I returned I also returned the list, so I would always have it available whenever I needed to use it. Whenever I used it I took it&#39;s head off and returned the tail, along with whatever else I was returning in a Tuple. The seed for the Random Generator was the CPUTime. Here&#39;s the code: (The function that returns the infinite list is infinito, the one on the bottom)<br>

<br>import Random<br>import CPUTime<br>import System.IO.Unsafe<br><br>{-|<br>    La funcion @rand@ Retorna una lista de numeros Random para ser utilizados en la seleccion de<br>    las guardias en los if y los do<br>-}<br>

rand :: (RandomGen g, Random a) =&gt; (a,a) -&gt; g -&gt; [a]<br>rand range gen = as<br>     where  (a,b) = split gen      -- create two separate generators<br>            as = randomRs range a  -- one infinite list of randoms<br>

<br>{-|<br>    @seed@ Retorna la semilla con la que la funcion Random va a iniciar la generacion de los numeros Randoms<br>-}<br>seed :: Int<br>seed = fromInteger (unsafePerformIO getCPUTime)<br><br>{-|<br>    @mygen@ Retorna el generador estandar con la semilla dada por la funcion @seed@<br>

-}<br>mygen  = mkStdGen seed<br><br>{-|<br>    @infinito@ Retorna la lista infinita de donde se van a sacar los numeros para elegir la guardia a ser ejecutada en los if y los do<br>-}<br>infinito:: (Num t,Random t) =&gt; [t]<br>

infinito = [ x | x &lt;- rand (1,1000000) mygen]<br><br><br><br>Hope it works for you!<br><br><br>Hector Guilarte<br>