On Mon, Apr 20, 2009 at 10:23 AM, Thomas Davie <tom.davie@gmail.com> wrote:
Really?  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.

I think it is. Suppose we call the function hnf :: a -> 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.  Or am I missing something here?