On 28 Jun 2010, at 09:38, José Romildo Malaquias wrote:

> Is there in Haskell a non monadic function of type a -> a -> Bool which
> test for physical equality of two values? It would return True if only
> if both values are the same object in memory.
> 
> For instance:
> 
>  value1 = "good"
>  value2 = "good"
> 
>  eq value1 value2 => False
> 
>  value1 = "good"
>  value2 = value1
> 
>  eq value1 value2 => True

This simply isn't possible without manually tagging values yourself (or with a 
library), it would violate referential transparency.

Remember, a function, called twice with semantically identical arguments must 
always return the same value, that isn't true of eq.

Even if this weren't an issue, you're relying heavily on the runtime's 
behaviour here.  There's nothing to stop the runtime, in the first example, 
observing that the two values are identical, and making them both take up the 
same memory – they are after all immutable, so that's totally safe.  There's 
similarly nothing to stop the runtime, in the second example, arbitrarily 
copying the the string (although it's probably not a great idea for efficiency).

Bob_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to