<div class="gmail_quote">On Wed, Oct 7, 2009 at 1:59 PM, Michael Mossey <span dir="ltr">&lt;<a href="mailto:mpm@alumni.caltech.edu">mpm@alumni.caltech.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
My thread about randomness got hijacked so I need to restate my remaining question here. Is it acceptable to write pure routines that use but do not return generators, and then call several of them from an IO monad with a generator obtained by several calls to newStdGen?<br>

<br>
shuffle :: RandomGen g =&gt; g -&gt; [a] -&gt; [a]<br>
shuffle = ...<br>
<br>
foo :: [a] -&gt; [a] -&gt; IO ()<br>
foo xs ys = do<br>
  g1 &lt;- newStdGen<br>
  print $ shuffle g1 xs<br>
  g2 &lt;- newStdGen<br>
  print $ shuffle g2 ys<br>
<br>
Does this kind of thing exhibit good pseudorandomness?<br>
</blockquote><div><br>If you believe in the safety of the split operation (which I don&#39;t), then yes, since use of it is what&#39;s happening behind the scenes. In other words, provided you&#39;re a faithful sort and split doesn&#39;t make you squirm too much, you don&#39;t need to plug all that ugly IO in there.<br>
</div></div>