typeclass Default = & default : -> Copy typeclass (Ord : #Eq) = & var is_less_then : Ord -> Bool typeclass (D : #A #B #C) 'A 'B = & var do_something : -> (& 'A & 'B) typeclass E 'A = & var do_something : -> 'A decl ( == ) ('A : #Ord) : 'A -> 'A -> Bool def ( == ) : a b = a.is_equal_to: b decl ( != ) ('A : #Ord) : 'A -> 'A -> Bool def ( != ) : a b = not: (a == b) decl ( < ) ('A : #Ord) : 'A -> 'A -> Bool def ( < ) : a b = a.is_less_then: b decl ( > ) ('A : #Ord) : 'A -> 'A -> Bool def ( > ) : a b = not: (a <= b) decl ( <= ) ('A : #Ord) : 'A -> 'A -> Bool def ( <= ) : a b = a < b ||. a == b decl ( >= ) ('A : #Ord) : 'A -> 'A -> Bool def ( >= ) : a b = not: (a < b)