[Haskell-cafe] Restricted type classes

wren ng thornton wren at freegeek.org
Thu Sep 9 23:33:01 EDT 2010


On 9/9/10 1:04 AM, David Menendez wrote:
> Fascinating. I figured there might be a counter-example involving seq,
> but this is pretty subtle.
>
> In particular, would it be fair to say that in Haskell-without-seq, "E
> (f a) a" and "E (f a) (f a)" are indistinguishable?

Yes, I think that without polymorphic seq (or within a strict language) 
they are observationally equivalent. But, observational equivalence is 
not the same as equality. And the category theoretic laws really do mean 
equality.

To pick an example: consider the case where 'a' is an enormous data 
structure and (f a) returns some small value. Even though (E (f a) a) 
and (E (f a) (f a)) are observationally equivalent within Haskell, 
they're still observationally distinct from outside of the language 
because they have very different memory profiles. (We may need to make E 
strict in the second argument, or NOINLINE impure, in order to guarantee 
this behavior.) Thus, the equality still fails, though this may go 
undetected for a long time until someone notices the memory leak.

-- 
Live well,
~wren


More information about the Haskell-Cafe mailing list