[Haskell-cafe] Re: instance Eq (a -> b)

Ashley Yakeley ashley at semantic.org
Wed Apr 14 15:16:20 EDT 2010

On 2010-04-14 11:12, John Meacham wrote:
> On Wed, Apr 14, 2010 at 02:07:52AM -0700, Ashley Yakeley wrote:
>>> So the facts that
>>> (1) f == g
>>> (2) f undefined = 6
>>> (3) g undefined = undefined
>>> is not a problem?
>> This is not a problem. f and g represent the same moral function, they
>> are just implemented differently. f is smart enough to know that its
>> argument doesn't matter, so it doesn't need to evaluate it. g waits
>> forever trying to evaluate its function, not knowing it doesn't need it.
> Hence they are distinct functions,

They are distinct Haskell functions, but they represent the same moral 

> and should not be determined to be equal by an equality instance.

I don't see why not. It doesn't break the expected Eq laws of 
reflexivity, symmetry, transitivity. Also, it supports this law:

   if f == g = True, then f x == g x = True

... in exactly the same way that it supports reflexivity, that is, "fast 
and loose" ignoring bottom.

> A compiler will not transform g into f
> because said distinction is important and part of the definition of a
> function.

I'm not seeing this implication as part of the semantics of (==).

Ashley Yakeley

More information about the Haskell-Cafe mailing list