"Abstraction of _ordinal types_, that is, of types where 
 each instance has a [[successor]] and [[predecessor]], such 
 as:
  
 - types which represent or are isomorphic to the 
   mathematical integers, for example, [[Integer]] and other 
   [[Integral]] numeric types, and even [[Character]], along 
   with
 - enumerated types which are isomorphic to the mathematical
   integers under modular arithmetic, for example, the days
   of the week, and
 - enumerated types which are isomorphic to a bounded range 
   of integers, for example, a list of priorities.
 
 The _increment_ operator `++` and _decrement_ operator `--`
 are defined for all types which satisfy `Ordinal`.
 
     function increment() {
         count++;
     }
 
 Many ordinal types have a [[total order|Comparable]]. If an
 ordinal type has a total order, then it should satisfy:
 
 - `x.successor >= x`, and
 - `x.predecessor <= x`.
 
 An ordinal enumerated type `X` with a total order has 
 well-defined `maximum` and `minimum` values where
 `minimum<x<maximum` for any other instance `x` of `X`.
 Then the `successor` and `predecessor` operations should
 satisfy:
 
 - `minimum.predecessor==minimum`, and
 - `maximum.successor==maximum`."
see (`class Character`, 
     `class Integer`, 
     `interface Integral`, 
     `interface Comparable`,
     `interface Enumerable`)
by ("Gavin")
tagged("Numbers")
shared interface Ordinal<out Other> of Other
        given Other satisfies Ordinal<Other> {
    
    "The successor of this value."
    shared formal Other successor;
    
    "The predecessor of this value."
    shared formal Other predecessor;
    
}