
On Thu, Jul 09, 2009 at 11:42:20AM +0200, Laszlo Nagy wrote:
I also run the hlint program against the random library and applied the recommendations. Here are the patches:
http://sites.google.com/site/rizsotto/patches/random-hlintclean.darcs
Thanks for taking the time to look into this. I'd be interested in other people's opinions on whether the hlint recommendations are an improvement or not. In my opinion there are a handful of things that are slightly less clear for no real benefit: createStdGen :: Integer -> StdGen -createStdGen s = mkStdGen32 $ fromIntegral s +createStdGen = mkStdGen32 . fromIntegral randoms :: RandomGen g => g -> [a] - randoms g = (\(x,g') -> x : randoms g') (random g) + randoms = (\(x,g') -> x : randoms g') . random theStdGen :: IORef StdGen -theStdGen = unsafePerformIO $ do - rng <- mkStdRNG 0 - newIORef rng +theStdGen = unsafePerformIO $ mkStdRNG 0 >>= newIORef In fact, I would change randoms to: randoms g = case random g of (x,g') -> x : randoms g' And the rest aren't really better or worse in my opinion, e.g.: instance Random Int where - randomR (a,b) g = randomIvalInteger (toInteger a, toInteger b) g - random g = randomR (minBound,maxBound) g + randomR (a,b) = randomIvalInteger (toInteger a, toInteger b) + random = randomR (minBound,maxBound)
http://sites.google.com/site/rizsotto/patches/random-time.darcs
Thanks; I'll take a look at adding time to GHC's corelibs, and then apply this. Thanks Ian