haskell / random

Random number library
Other
53 stars 50 forks source link

Introduce new `SplitGen` type class #160

Closed lehins closed 7 months ago

lehins commented 7 months ago

Fixes #97

I've been thinking for a while about this and I think the correct path forward is to introduce a separate class for splittable generators, which I called SplitGen and deprecate the old split function.

The benefit of this approach is that current user code does not break and gives a graceful path to upgrade to the new type class.

Other approaches were considered in #94 and discussed at length in https://github.com/idontgetoutmuch/random/issues/7

I highly doubt that we will provide a generic approach of using some hash function for implementing PRNG splitting. I would rather prefer such functionality be in a separate library that other packages that want to implement SplitGen can opt-in into using.

Shimuuar commented 7 months ago

+1

Following will cause compile failure for instances which don't define split and SplitGen instance. But I think it's fine

  default split :: SplitGen g => g -> (g, g)
  split = splitGen