
On Wed, Oct 7, 2009 at 1:59 PM, Michael Mossey
My thread about randomness got hijacked so I need to restate my remaining question here. Is it acceptable to write pure routines that use but do not return generators, and then call several of them from an IO monad with a generator obtained by several calls to newStdGen?
shuffle :: RandomGen g => g -> [a] -> [a] shuffle = ...
foo :: [a] -> [a] -> IO () foo xs ys = do g1 <- newStdGen print $ shuffle g1 xs g2 <- newStdGen print $ shuffle g2 ys
Does this kind of thing exhibit good pseudorandomness?
If you believe in the safety of the split operation (which I don't), then yes, since use of it is what's happening behind the scenes. In other words, provided you're a faithful sort and split doesn't make you squirm too much, you don't need to plug all that ugly IO in there.