+++ /dev/null
-implementation module GenEq\r
-\r
-import StdGeneric, StdEnv\r
-\r
-generic gEq a :: a a -> Bool\r
-gEq{|Int|} x y = x == y\r
-gEq{|Char|} x y = x == y\r
-gEq{|Bool|} x y = x == y\r
-gEq{|Real|} x y = x == y\r
-gEq{|String|} x y = x == y\r
-gEq{|UNIT|} UNIT UNIT = True\r
-gEq{|PAIR|} fx fy (PAIR x1 y1) (PAIR x2 y2) = fx x1 x2 && fy y1 y2\r
-gEq{|EITHER|} fl fr (LEFT x) (LEFT y) = fl x y\r
-gEq{|EITHER|} fl fr (RIGHT x) (RIGHT y) = fr x y\r
-gEq{|EITHER|} fl fr _ _ = False\r
-gEq{|CONS|} f (CONS x) (CONS y) = f x y\r
-gEq{|FIELD|} f (FIELD x) (FIELD y) = f x y\r
-gEq{|OBJECT|} f (OBJECT x) (OBJECT y) = f x y\r
-gEq{|{}|} f xs ys = eqArray f xs ys\r
-gEq{|{!}|} f xs ys = eqArray f xs ys\r
-\r
-derive gEq [], (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)\r
-\r
-\r
-(===) infix 4 :: a a -> Bool | gEq{|*|} a\r
-(===) x y = gEq{|*|} x y\r
-\r
-(=!=) infix 4 :: a a -> Bool | gEq{|*|} a\r
-(=!=) x y = not (x === y)\r
-\r
-eqArray f xs ys = size xs == size ys && eq 0 (size xs) xs ys\r
-where\r
- eq i n xs ys\r
- | i == n = True \r
- | i < n = f xs.[i] ys.[i] && eq (inc i) n xs ys\r