    "Abstract supertype of ranged objects which map a range
     of `Comparable` keys to ranges of values. The type
     parameter `Span` abstracts the type of the resulting
     range.

     A span may be obtained from an instance of `Ranged`
     using the span operator:

         print(\"hello world\"[0..5])
     "
    see (`interface List`,
         `interface Sequence`,
         `class String`)
    shared interface Ranged<in Index, out Span> of Span
            given Index satisfies Comparable<Index> {

        "Obtain a span containing the mapped values between
         the two given indices."
        shared formal Span span(Index from, Index to);

        "Obtain a span containing the mapped values between
         the starting index and the end of the receiver."
        shared formal Span spanFrom(Index from);

        "Obtain a span containing the mapped values between
         the start of the receiver and the end index."
        shared formal Span spanTo(Index to);

        "Obtain a segment containing the mapped values
         starting from the given index, with the given
         length."
        shared formal Span segment(Index from, Integer length);

    }