[Haskell-cafe] better way to do this?
Michael P Mossey
mpm at alumni.caltech.edu
Tue Oct 6 16:22:04 EDT 2009
Duncan Coutts wrote:
> So you end up with pure functions like:
> shuffle :: RandomGen g => g -> [x] -> [x]
Thanks for the help, Duncan. I'm confused on one point. Don't you always need
the new state of the generator back? So wouldn't this need to be:
shuffle :: RandomGen g => g -> [x] -> (g,[x])
> Another approach is to hide the 'g' inside a monad. That's what
> MonadRandom is all about. eg:
> shuffle :: [x] -> Rand [x]
One tutorial mentions the class Gen in the Test.QuickCheck module. Is "Rand" a
different class defined somewhere else?
> The tutorials above explain about the other random functions, for
> getting values of different types (not just Int) and restricted ranges
> of number etc.
> Of course at some point you want to seed the random number generator
> with some initial genuinely random value (not like the 12345 we used
> above). That is the only place in your random-handling code that needs
> to do IO. All the rest of it can be pure.
What function gives you that initial random seed? (Grabs it from the system clock?)
More information about the Haskell-Cafe