I do have asked myself the question whether a &quot;really random generating&quot; function could be regarded as &quot;pure&quot; somehow (actually would a true random function still be a mathematical function?)<div><div><div>
<div><div><div><div><br></div><div>E.g. the function would return a true (not pseudo) random number, practically unpredictable (e.g. hardware assisted, using some physical phenomenon, e.g. using atmospheric noise or something<span class="Apple-style-span" style="font-family: Tahoma; font-size: 15px; line-height: 26px; "><span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: normal; ">). So you surely won&#39;t get referential transparency but since the function is really random, this would be correct behavior?</span></span><br>
</div></div><div><br></div><div>Of course you could just put this random generator in the IO monad, but certain&nbsp;algorithms- like Monte Carlo - intuitively don&#39;t seem to operate in a IO monad to me.</div><div><br></div>
<div>Okay, just some thoughts from someone who knows absolutely nothing about category theory or advanced computer science, so don&#39;t shoot me ;-)</div><div><br></div><div><div><div class="gmail_quote">On Thu, Feb 5, 2009 at 10:36 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;">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<div class="Ih2E3d"><br>
<br>
Andrew Wagner wrote:<br>
| I understand that unsafeXXX allows impurity, which defiles our ability<br>
| to reason logically about haskell programs like we would like to. My<br>
| question is, to what extent is this true?<br>
<br></div>
My opinion is that unsafeXXX is acceptable only when its use is<br>
preserved behind an abstraction that is referentially transparent and<br>
type safe. Others may be able to help refine this statement.<div class="Ih2E3d"><br>
<br>
| Suppose we had a module, UnsafeRandoms, which had a function that would<br>
| allow you to generate a different random number every time you call it.<br>
| The semantics are relatively well-defined, impurity is safely sectioned<br>
| off in its own impure module, which is clearly labeled as such. How much<br>
| damage does this do?<br>
<br></div>
This does not preserve referential transparency, so by my criteria above<br>
this is an unacceptable use of an unsafe function. One reason it&#39;s a bad<br>
idea is that it removes determinism, which may be very important for<br>
testability.<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>
iEYEARECAAYFAkmLW/MACgkQye5hVyvIUKniOACfQGPLiY65+eiMfsv7BlbYLI++<br>
Bd0An1N5wp6TDkJzhmdw831/Gj45Bv9S<br>
=TnQg<br>
-----END PGP SIGNATURE-----<div><div></div><div class="Wj3C7c"><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br></div></div></div></div></div></div></div>