Well, I don't know how many generators you need. But I'm sure you can pass them around in a way that doesn't leak.
On 7/31/07, Chad Scherrer <[EMAIL PROTECTED]> wrote: > > Ok, that looks good, but what if I need some random values elsewhere > in the program? This doesn't return a new generator (and it can't > because you never get to the end of the list). Without using IO or ST, > you'd have to thread the parameter by hand or use the State monad, > right? This is where I was leaking space before. > > Actually, this makes me wonder... I think what killed it before was > that the state was threaded lazily through the various (= very many) > calls. I suppose a State' monad, strict in the state, could help here. > I wonder how performance for this would compare with IO or ST. Might > have to try that sometime... > > Chad > > On 7/31/07, Lennart Augustsson <[EMAIL PROTECTED]> wrote: > > No leak in sight. > > > > -- Lennart > > > > import Random > > import Array > > > > randomElts :: RandomGen g => g -> [a] -> [a] > > randomElts _ [] = [] > > randomElts g xs = map (a!) rs > > where a = listArray (1, n) xs > > rs = randomRs (1, n) g > > n = length xs > > > > main = do > > g <- getStdGen > > let xs = randomElts g [10,2,42::Int] > > print $ sum $ take 1000000 xs > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe