7f0a6c91e22f8c7556f7e77db215923a0243260a
[phd-thesis.git] / appx / lst / generic_eq.icl
1 module generic_eq
2 import StdEnv, StdGeneric
3
4 generic gEq a :: a a -> Bool
5
6 gEq{|Int|} x y = x == y
7 gEq{|Bool|} x y = x == y
8 gEq{|Real|} x y = x == y
9 gEq{|Char|} x y = x == y
10 gEq{|UNIT|} x y = True
11 gEq{|OBJECT|} f (OBJECT x) (OBJECT y) = f x y
12 gEq{|CONS|} f (CONS x) (CONS y) = f x y
13 gEq{|RECORD|} f (RECORD x) (RECORD y) = f x y
14 gEq{|FIELD|} f (FIELD x) (FIELD y) = f x y
15 gEq{|PAIR|} fl fr (PAIR lx rx) (PAIR ly ry) = fl lx ly && fr rx ry
16 gEq{|EITHER|} fl _ (LEFT x) (LEFT y) = fl x y
17 gEq{|EITHER|} _ fr (RIGHT x) (RIGHT y) = fr x y
18 gEq{|EITHER|} _ _ _ _ = False
19
20 :: T = C1 Int ([Char], ?Bool) | C2
21 derive gEq [], T, (,), ?
22
23 Start = (gEq{|*|} C2 (C1 42 ([], ?Just True)), gEq{|*->*|} (<) [1,2,3] [2,3,4])
24 // (False, True)