abstract object num isa ordered_hashable[num];
signature as_int(num):integer;
method as_float(n@:num):float;
signature as_single_float(num):single_float;
signature as_double_float(num):double_float;
method =(l@:num,r@:num):bool;
method <(l@:num,r@:num):bool;
signature +(`T <= num, T):T;
- standard arithmetic
signature -(`T <= num, T):T;
signature *(`T <= num, T):T;
signature /(`T <= num, T):T;
implementation +(l@:num,r@:num):num;
implementation -(l@:num,r@:num):num;
implementation *(l@:num,r@:num):num;
implementation /(l@:num,r@:num):num;
signature +(integer, float):float;
signature +(float, integer):float;
signature -(integer, float):float;
signature -(float, integer):float;
signature *(integer, float):float;
signature *(float, integer):float;
signature /(integer, float):float;
signature /(float, integer):float;
method negate(n:`T <= num):T;
method -(n:`T <= num):T;
method +(n:`T <= num):T;
method -_ov(l@:num):num;
method +_ov(l@:num,r@:num):num;
method -_ov(l@:num,r@:num):num;
method *_ov(l@:num,r@:num):num;
method /_ov(l@:num,r@:num):num;
method pred(i@num:`T <= num):T;
method succ(i@num:`T <= num):T;
method square(n:`T <= num):T;
method cube(n:`T <= num):T;
method abs(n:`T <= num):T;
- absolute value
method sign(x:num):int;
- return -1, 0, or 1 depending on sign of argument
method average(n1:num, n2:num):num;
- arithmetic average: (n1+n2)/2
method power(x@num:`T <= num, power:integer):S
where signature *_ov(T,T):`S,
S <= T;
- exponentiation
method **(x@num:`T <= num, power:integer):S
where signature *_ov(T,T):`S, S <= T;
- same as
power
method sqrt(x@num:`T <= num):T;