abstract object comparable[T <= comparable[T]];
extend type comparable[`T] subtypes comparable[`S <= T];
signature =(x1:`T <= comparable[T], x2:`T <= comparable[T]):bool;
- equal (abstract) values?
method !=(x1@:`T <= comparable[T], x2@:`T <= comparable[T]):bool;
- not
=
abstract object partially_ordered[T <= partially_ordered[T]]
isa comparable[T];
extend type partially_ordered[`T] subtypes partially_ordered[`S <= T];
signature <(x1:`T <= partially_ordered[T],
x2:`T <= partially_ordered[T]):bool;
- x1 ordered below x2?
method <=(x1@:`T <= partially_ordered[T],
x2@:`T <= partially_ordered[T]):bool;
-
< or
=
method > (x1@:`T <= partially_ordered[T],
x2@:`T <= partially_ordered[T]):bool;
- x2
< x1?
method >=(x1@:`T <= partially_ordered[T],
x2@:`T <= partially_ordered[T]):bool;
-
> or
=
abstract object ordered[T <= ordered[T]] isa partially_ordered[T];
extend type ordered[`T] subtypes ordered[`S <= T];
method <=(x1@:`T <= ordered[T], x2@:`T <= ordered[T]):bool;
method >=(x1@:`T <= ordered[T], x2@:`T <= ordered[T]):bool;
method min (x1:`T <= ordered[T], x2:`T <= ordered[T]):T;
method max (x1:`T <= ordered[T], x2:`T <= ordered[T]):T;
method compare(x1@:`T <= ordered[T], x2@:`T <= ordered[T],
if_less:&():`S, if_equal:&():`S, if_greater:&():`S
):S;
abstract object ordered_using_compare[T <= ordered[T]] isa ordered[T];
extend type ordered_using_compare[`T] subtypes ordered_using_compare[`S<=T];
method =(x1@:`T <= ordered_using_compare[T],
x2@:`T <= ordered_using_compare[T]):bool;
method <(x1@:`T <= ordered_using_compare[T],
x2@:`T <= ordered_using_compare[T]):bool;
method compare(x1@:`T <= ordered_using_compare[T],
x2@:`T <= ordered_using_compare[T],
if_less:&():`S, if_equal:&():`S, if_greater:&():`S
):S;
abstract object hashable[T <= hashable[T]] isa comparable[T];
extend type hashable[`T] subtypes hashable[`S <= T];
signature hash(hashable[`T], range:int):int;
A hashable object is a comparable (equality-testable) object
that also supports a
hash function.
hash(x, r) returns an
integer in the range
[0..r-1], subject to the constraint that
if
a = b, then
hash(a, r) = hash(b, r).