Well, one could say that a truly random number function takes as input time and some constant unique identifier (serial number) of the TRND device and gives you the random value measured at that time by this device. Of course this would mean the random value is not really random, since &quot;the potential creator of the universe&quot; would have known the value already, but to all humble beings living in the bubble, it would be Truly Random :)<div>
<div><br></div><div>Then the question is, is time a function? If so, is it discrete?</div><div><br></div><div>Okay, this is not Haskell anymore, this would become&nbsp;philosophy, and since a good and smart friend of mine told me that nobody really knows what time is, this is off topic. Sorry! &nbsp;:)<br>
</div><div><br></div><div><div><div><div><div class="gmail_quote">On Thu, Feb 5, 2009 at 11:31 PM, Jake McArthur <span dir="ltr">&lt;<a href="mailto:jake@pikewerks.com">jake@pikewerks.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="Ih2E3d">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br></div><div class="Ih2E3d">
Peter Verswyvelen wrote:<br>
| I do have asked myself the question whether a &quot;really random generating&quot;<br>
| function could be regarded as &quot;pure&quot; somehow (actually would a true<br>
| random function still be a mathematical function?)<br>
|<br>
| E.g. the function would return a true (not pseudo) random number,<br>
| practically unpredictable (e.g. hardware assisted, using some physical<br>
| phenomenon, e.g. using atmospheric noise or something). So you surely<br>
| won&#39;t get referential transparency but since the function is really<br>
| random, this would be correct behavior?<br>
<br></div>
An informal definition of a function might be something like a black box<br>
that takes and input and produces an output, and for each possible<br>
input, the output must be the same. Taking this to be a function, there<br>
is really no such thing as a random function, and if there was, it<br>
wouldn&#39;t even need to be a function. (What would the input to it be?)<br>
<br>
If you wanted to mathematically represent a random number, it would, in<br>
most cases I can think of, best be represented as a free variable. In a<br>
program, such a free variable could be filled in by the runtime.<br>
Conveniently, (and by no coincidence) this is something the IO monad can<br>
provide for us! :)<div class="Ih2E3d"><br>
<br>
| Of course you could just put this random generator in the IO monad, but<br>
| certain algorithms- like Monte Carlo - intuitively don&#39;t seem to operate<br>
| in a IO monad to me.<br>
<br></div>
Why not?<br>
<br>
A Random monad might be more appropriate in this case anyway. Such a<br>
monad is a State monad that hold a random seed. Every time a random<br>
number is needed, the seed is passed to a deterministic psuedo-random<br>
number generator, and a new seed is put as the next state.<br>
<br>
If a truly random number is ever needed, either IO or unsafeInterleaveIO<br>
will be needed. The use of unsafeInterleaveIO would be a (rightly)<br>
controversial choice though.<div class="Ih2E3d"><br>
<br>
- - Jake<br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.9 (GNU/Linux)<br>
Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org" target="_blank">http://enigmail.mozdev.org</a><br>
<br></div>
iEYEARECAAYFAkmLaK4ACgkQye5hVyvIUKk88QCfRksu7z80QmzgjUvmiyrzDDjl<br>
QnsAn1R5DHz2tJpWP3yb0+U+loyBdyCX<br>
=RIX9<br>
-----END PGP SIGNATURE-----<br>
</blockquote></div><br></div></div></div></div></div>