On Sat, 2007-10-13 at 13:35 -0400, Brandon S. Allbery KF8NH wrote: > For starters, look into "seq". Try applying it to any expression > using a generated random number. This should force evaluation to > occur somewhere other than when random is trying to figure out what > StdGen value it's been told to use as its initial state. >
Ok, but I still wonder where that might be. random and randomR are used in a function named "next" as show here: next :: (Array Int a, Array Int a, UArray Int Double) -> StdGen -> (a, StdGen) next (xs, as, rs) g = let n = length $ indices xs (x1, g1) = randomR (0, n - 1) g (x2, g2) = random g1 r = rs!x1 in if x2 <= r then (xs!x1, g2) else (as!x1, g2) x1 and x2 are used in the same function so I assume this already requires their evaluation. The only function that calls "next" is randomList: randomList :: (Array Int a, Array Int a, UArray Int Double) -> StdGen -> [a] randomList t g = let (n, g') = next t g in n:randomList t g' Cf. my original e-mail for the complete program. > Alternately you can put all the uses in IO and use > Control.Exception.evaluate (or even print). This is probably not > what you want to do in your actual production code, however. > Right. This is not what I want. Many thanks again, Thoralf _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe