On Mon, Jan 4, 2010 at 6:31 PM, Dale Jordan <da...@alum.mit.edu> wrote: > Can anyone explain why this is looping or point out a better way to > generate an arbitrary-length random list while still being able to > reuse the generator? (I'd rather not use split since this generator > doesn't support it and its of dubious soundness.)
Well there is more than one way to split. You don't have to split the generator -- if you act on a stream of random numbers, you can split the stream also: split :: [a] -> ([a],[a]) split (x:xs) = (x:bs,as) where (as,bs) = split xs However too much splitting in this case causes a performance penalty, since you start discarding large portions of the stream. If you don't want to split the generator, this is the only way I can think of that is deterministic in the random seed. If determinism is not required, as many times it is not with *random* computations, you can use the value-supply package on hackage, which uses a bit of unsafePerformIO magic to turn a serial stream into a splittable stream. But you lose composable repeatability. Luke _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe