    "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;

    }