Random Number Update

Dominic Steinitz dominic at steinitz.org
Tue Jan 24 13:35:41 UTC 2017

I wanted to give an update on the status of random numbers in Haskell.

 1. It is well known that the random number generator package
    https://hackage.haskell.org/package/random gives unexpected
 2. Most people do *not* use it. I believe
    https://hackage.haskell.org/package/mwc-random is a popular choice
    but developers are free to use e.g. Mersenne Twister, PCG
    (Permuted Congruential Generator), TF (ThreeFish) and many others.
 3. Approximately 2 years, I made a proposal to replace the algorithm
    within random (https://hackage.haskell.org/package/random) with
    that used by tf-random
    (https://hackage.haskell.org/package/tf-random) which is used by
    QuickCheck. In summary, the response to this was that someone
    should do more research with the result that nothing happened.
 4. In the meantime, random
    (https://hackage.haskell.org/package/random) is *no longer* a core
    library. It's just a library with the same status as
    e.g. mwc-random. However, it has one difference: it uses the name
    for its module: "System.Random". Other RNGs use
    "System.Random.MWC", "System.Random.PCG", "System.Random.Mersenne"

As a maintainer of random
(https://hackage.haskell.org/package/random), my proposal now is to
deprecate all of it.

I am not clear what the policy is on namespace usage. Could every RNG
use the module name "System.Random"? Or is this somehow reserved? If
the latter then I propose that *nothing* uses this name and that all
RNGs should add a suffix indicating which algorithm they use.

I note that the Haskell Platform contains tf-random so users of this
will still be able to generate (better) random numbers.

If someone comes along in the future, as I hope they do, and
implements e.g. Guy Steele's splitmix algorithm then this can occupy
the name "System.Random.Splitmix" and have the package name

The advantages of doing this are:

 1. Neophyte (and experienced) Haskellers do not accidentally use an
    RNG which gives unexpected results.
 2. No-one will any longer be able to write blogs or papers about this
    embarrassing aspect of Haskell.

I believe the co-maintainer of random
(https://hackage.haskell.org/package/random), Carter Schonwald, has a
different view on this matter but it is best he speaks for himself
rather than me imperfectly trying to reflect his thinking.

Dominic Steinitz
dominic at steinitz.org

More information about the Libraries mailing list