"Abstraction of numbers. Binary numeric operations are 
 defined the interface [[Numeric]]. This type defines 
 operations which can be expressed without reference to 
 the self type `Other` of `Numeric`."
see (`interface Numeric`, `interface Scalar`)
by ("Gavin")
shared interface Number {
    
    "Determine if the number is positive."
    shared formal Boolean positive;
    
    "Determine if the number is negative."    
    shared formal Boolean negative;

    "The number, represented as a `Float`."
    throws (`class OverflowException`,
            "if the number is too large to be represented 
             as a `Float`")
    shared formal Float float;
        
    "The number, represented as an `Integer`, after 
     truncation of any fractional part."
    throws (`class OverflowException`,
            "if the number is too large to be represented 
             as an `Integer`")
    shared formal Integer integer;
    
    "The magnitude of the number."
    shared formal Number magnitude;
    
    "The sign of this number. Returns `1` if the number 
     is positive, `-1` if it is negative, or `0` if it 
     is zero."
    shared formal Integer sign;
    
    "The fractional part of the number, after truncation 
     of the integral part."
    shared formal Number fractionalPart;
    
    "The integral value of the number after truncation 
     of the fractional part."
    shared formal Number wholePart;

}