"Abstraction of ordinal types, that is, types with successor and predecessor operations, including `Integer` and other `Integral` numeric types. `Character` is also considered an ordinal type. `Ordinal` types may be used to generate a `Range`." see (`class Character`, `class Integer`, `interface Integral`, `class Range`) by ("Gavin") 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; } "Abstraction of ordinal types whose instances can be mapped to the integers or to a range of integers." shared interface Enumerable<out Other> of Other satisfies Ordinal<Other> given Other satisfies Enumerable<Other> { "The corresponding integer. The implementation must satisfy these constraints: (x.successor).integerValue = x.integerValue+1 (x.predecessor).integerValue = x.integerValue-1 for every instance `x` of the enumerable type." shared formal Integer integerValue; }