doc "Abstraction of numeric types supporting addition,
     subtraction, multiplication, and division, including
     `Integer` and `Float`. Additionally, a numeric type 
     is expected to define a total order via an 
     implementation of `Comparable`."
see (Integer, Float, Comparable)
by "Gavin"
shared interface Numeric<Other> of Other
        satisfies Summable<Other> & Invertable<Other>
        given Other satisfies Numeric<Other> {

    doc "The difference between this number and the given 
         number."
    shared formal Other minus(Other other);

    doc "The product of this number and the given number."
    shared formal Other times(Other other);

    doc "The quotient obtained by dividing this number by 
         the given number. For integral numeric types, this 
         operation results in a remainder."
    see (Integral)
    shared formal Other divided(Other other);

}

/*shared N plus<X,Y,N>(X x, Y y)
        given N of X|Y satisfies Numeric<N>
        given X satisfies Castable<N> & Numeric<X>
        given Y satisfies Castable<N> & Numeric<Y> {
    return x.as<N>().plus(y.as<N>());
}*/