module Data.Object import Data.Bool; export eq(x :: a, y :: a) :: Bool = prim%eq(x,y); class Eq a { (==)(x :: a, y :: a) :: Bool = not (x != y); (!=)(x :: a, y :: a) :: Bool = not (x == y); } instance Eq () { (==)(x,y) = True; (!=)(x,y) = False; } instance Eq Bool { (!=)(x,y) = x ^ y; } class SafelyConvertable a b { safeConvert :: a -> b; } class UnsafelyConvertable a b { unsafeConvert :: a -> b; }