<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On 20 Apr 2009, at 10:57, Peter Verswyvelen wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div class="gmail_quote">On Mon, Apr 20, 2009 at 10:23 AM, Thomas Davie <span dir="ltr">&lt;<a href="mailto:tom.davie@gmail.com">tom.davie@gmail.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 style="word-wrap:break-word"><div><div class="im"><div>Really? &nbsp;Is it any less referentially transparent than unamb already is - i.e. it's referentially transparent, as long as the two values really are equal.<br> </div></div><div class="im"></div></div></div></blockquote><div><br></div><div>I think it is. Suppose we call the function hnf :: a -&gt; Bool. hnf might return a different result for the same argument, since the evaluation of the argument might be happening on a different thread, so the result of hnf depends on the time when it is evaluated. &nbsp;Or am I missing something here?</div></div></blockquote><br></div><div>Sure, so hnf would give us a non-determined result, but I don't think that makes unamb any less referentially transparent – the same value is always returned, and always reduced at least to hnf.</div><div><br></div><div>Bob</div><br></body></html>