
On Fri, 11 Jan 2008 09:11:52 +0200, Lennart Augustsson
Some people seem to think that == is an equality predicate. This is a big source of confusion for them; until they realize that == is just another function returning Bool they will make claims like [1..]==[1..] having an unnatural result. The == function is only vaguely related to the equality predicate in that it is meant to be a computable approximation of semantic equality (but since it's overloaded it can be anything, of course).
So let's imagine:
ones = 1 : ones
ones' = repeat 1 where repeat n = n : repeat n
(==) :: Eq a => a -> a -> Bool -- what is (y (y) ) by the way ? -- how about ( y id ) ? y f = f (y f). ones :: Num a => [a] ones = y (1 :) repeat :: a -> [a] repeat = \n -> y (n:) ones' :: Num a => [a] ones' = repeat 1 = (\n->y(n:)) 1 = y (1 : ) To be able to test them for equality, we must have Eq a. So, the reason we cannot test them for equality is that we cannot test y (a : ) == y (a : ) where a == a is testable. ________ Information from NOD32 ________ This message was checked by NOD32 Antivirus System for Linux Mail Servers. part000.txt - is OK http://www.eset.com