[Haskell-cafe] Lazy MWC Random?
greg at gregorycollins.net
Wed Jan 29 07:56:04 UTC 2014
Try using unsafeInterleaveST?.
On Tue, Jan 28, 2014 at 7:08 PM, Sacha Sokoloski <sacha404 at gmail.com> wrote:
> Dear Haskellers,
> I'm in a situation where I'd like to generate an infinite list of random
> elements (basically, I'm simulating stochastic systems). I feel like MWC
> Random is the fastest RNG available, but when I try to pull the infinite
> list out of RandST, it obviously doesn't halt, because ST is strict.
> Someone posted a way around this in this stack overflow thread:
> Which would fix my problem. My question is though, why isn't ST.Lazy
> included as a PrimMonad instance anyway? The best answer I can come up with
> is that, since evaluating the Generator is time dependent, it's best to
> make it strict to make sure that one's program isn't tapping into
> /dev/random at arbitrary times.
> In this way the best stackoverflow solution is quite good. It requires one
> to strictly generate a Seed (since that's the only way to do it), but then
> converts the ST Monad to the Lazy version to Lazify everything else.
> However, my understanding of PrimMonad is simply that it's a class of low
> level monads i.e. IO and ST, so if there's some deeper reason to this, it's
> beyond me.
> Another question that I'm puzzling over: In the stack overflow solution,
> they also make an effort to only have to generate the seed a single time.
> Is this important performance wise? What I suppose this must hinge upon, is
> whether in saving an ST s Gen to a Seed, the conversion from an immutable
> to mutable array requires a copy or not. Is that the full extent of the
> complexity of this? Is the stackoverflow solution ultimately the most
> efficient? Is using MWC Random to generate infinite lists and efficient
> solution anyway?
> Thanks for any insight,
> - Sacha Sokoloski
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
Gregory Collins <greg at gregorycollins.net>
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe