random package:mersenne-random

Generate high quality pseudorandom numbers using a SIMD Fast Mersenne Twister The Mersenne twister is a pseudorandom number generator developed by Makoto Matsumoto and Takuji Nishimura that is based on a matrix linear recurrence over a finite binary field. It provides for fast generation of very high quality pseudorandom numbers This library uses SFMT, the SIMD-oriented Fast Mersenne Twister, a variant of Mersenne Twister that is much faster than the original. It is designed to be fast when it runs on 128-bit SIMD. It can be compiled with either SSE2 and PowerPC AltiVec support, to take advantage of these instructions.
cabal install -fuse_sse2
On an x86 system, for performance win. By default the period of the function is 2^19937-1, however, you can compile in other defaults. Note that this algorithm on its own is not cryptographically secure. For more information about the algorithm and implementation, see the SFMT homepage, http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html and, Mutsuo Saito and Makoto Matsumoto, /SIMD-oriented Fast Mersenne Twister: a 128-bit Pseudorandom Number Generator/, in the Proceedings of MCQMC2006, here: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/sfmt.pdf
Given an initialised SFMT generator, the MTRandom allows the programmer to extract values of a variety of types. Minimal complete definition: random.
Uses the supplied function to get a value from the current global random generator, and updates the global generator with the new generator returned by the function. For example, rollDice gets a random integer between 1 and 6:
rollDice :: IO Int
rollDice = getMTRandom (randomR (1,6))