On Thu, Jun 21, 2012 at 7:00 AM, George Giorgidze <giorgi...@gmail.com>wrote: > > > > > Regarding antisymmetry, if I also define > > > > instance Ord Foo where > > (==) = (==) `on` a > > > > then would that count as satisfying the law? > > Probably, you mean here Eq instead of Ord. > > If a <= b and b <= a then a = b (antisymmetry) > > It all depends on what one means by "=". Opinions differ on this, see > [1]. If we mean "==", which is a function to Bool, from the Eq class, > then it does satisfy the antisymmetry law. > > But in this case, the question arises what are the laws that Eq > instances should satisfy. > > Should it be that x == y implies x = y? But once again what does "=" > mean here. It depends on who you ask (once again see [1]). > > These nits don't need to be picked. The theory of equivalence relations is extremely well understood. This is a topic covered by the sophomore mathematics level.
> > But, my opinion is that if you can write a pure function f that can > tell them apart (i.e., f x /= f y), I find it a very strange notion of > equality. There's your problem. It is straight-forward to generate an equivalence relation that can tell things apart with respect to a different equivalence relation. Equivalence relations do not need to agree! If you really want to keep distinct equivalence relations apart semantically, just use a newtype wrapper to explicitly "name" the relation. > I am not saying that this is a trivial undertaking, but would be a > more principled approach. It would require the Haskell community and, > especially, standard library and language specification developers to > agree on a suitable notion of equality that Eq instances should > satisfy. > That has already happened. A relation merely has to satisfy the equivalence relation axioms.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe