ulid
ulid copied to clipboard
Don't use `unsafePerformIO`, and migrate to random-1.2.
I think the ULID type shouldn't be an instance of Random (or Uniform since random-1.2) by taking the trouble to use unsafePerfomIO.
The random function should be pure: if the argument g is the same value, the result of random g should be same. Breaking this rule can cause some troubles. For example, we can't reproduce the same value with the same generator (perhaps deserialized from a database). I haven't actually got troubled with such a case, but I think it'll cause some hard-to-find bug some day.
My suggestion is to drop the support for Random instance of ULID, and define the instance Random ULIDRandom instead. That makes the package safely available.
Speaking of the random package, due to the changes in random-1.2, now this package can't be built with the latest random. So how about fixing the problem and supporting random-1.2 at the same time?
More details: https://github.com/commercialhaskell/stackage/issues/5474
Should be fixed with: https://github.com/jimenezrick/ulid/commit/3e0f1f9698f6e2cce88bfb78832da30e06854d54
Thanks @jimenezrick. Fixed this in 68e29c3
@igrep is there some documentation or a blog post where I can read more about this?
@ad-si I can find only this https://www.reddit.com/r/haskell/comments/hefgxa/ann_random120_a_long_overdue_upgrade/