A range of adjacent `Enumerable` values. Two values of an enumerable type are considered adjacent if their offset is of unit or zero magnitude. Thus, a `Range` is a list of values where for every integer `index` where both `index` and `index+1` fall within the indices of the range:

    range[index+1].offset(range[index]).magnitude <= 1

A range is always nonempty, containing at least one value. Thus, it is a `Sequence`.

A sequence of adjacent values may be represented very efficiently in memory, either:

- via its endpoints, `first..last`, or
- via an endpoint and length, `first:size`.

Furthermore, certain operations are much more efficient than for other lists, assuming that the enumerable type has efficient neighbour and offset functions.

The functions `span()` and `measure()`, and corresponding operators `..` and `:` are used to create new instances of `Range`.

See also `span()`, `measure()`

- `Anything`
  - `Object`
    - `Range` ...and other supertypes

- `Range`
  - `Object`
    - `Anything`
  - `Sequence`
    - `Iterable`
      - `Category`
    - `Sequential`
      - `List`
        - `Collection`
          - `Iterable`
            - `Category`
        - `Correspondence`
        - `Ranged`
          - `Iterable`
            - `Category`
      - `Ranged`
        - `Iterable`
          - `Category`

no subtypes hierarchy

Initializer
`Range()`

Attributes
`coalesced` | Source Code `shared actual Range<Element> coalesced` Returns the range itself, since a range cannot contain null elements. Refines `Iterable.coalesced`
`decreasing` | Source Code `shared formal Boolean decreasing` Determines if the range is decreasing, that is, if predecessors occur after successors.
`increasing` | Source Code `shared formal Boolean increasing` Determines if the range is increasing, that is, if successors occur after predecessors.

Inherited Attributes
Attributes inherited from: `Object` `Object.hash`, `Object.string`
Attributes inherited from: `Collection<Element>` `Collection.string`
Attributes inherited from: `Correspondence<Key,Item>` `Correspondence.keys`
Attributes inherited from: `Iterable<Element,Absent>` `Iterable.coalesced`, `Iterable.cycled`, `Iterable.empty`, `Iterable.exceptLast`, `Iterable.first`, `Iterable.indexed`, `Iterable.last`, `Iterable.paired`, `Iterable.rest`, `Iterable.size`, `Iterable.string`
Attributes inherited from: `List<Element>` `List.hash`, `List.lastIndex`, `List.reversed`
Attributes inherited from: `[Element+]` `Sequence.string`
Attributes inherited from: `Element[]` `Sequential.string`

Methods
`containsElement` | Source Code `shared formal Boolean containsElement(Element element)` Determines if this range includes the given value.
`includesRange` | Source Code `shared formal Boolean includesRange(Range<Element> range)` Determines if this range includes the given range.
`shifted` | Source Code `shared formal Range<Element> shifted(Integer shift)` Returns a range of the same length and type as this range, with its endpoints shifted by the given number of elements, where: a negative `shift` measures decrements, and a positive `shift` measures increments.

Inherited Methods
Methods inherited from: `Object` `Object.equals()`
Methods inherited from: `Category<Element>` `Category.contains()`, `Category.containsAny()`, `Category.containsEvery()`
Methods inherited from: `Collection<Element>` `Collection.clone()`
Methods inherited from: `Correspondence<Key,Item>` `Correspondence.defines()`, `Correspondence.definesAny()`, `Correspondence.definesEvery()`, `Correspondence.get()`, `Correspondence.getAll()`
Methods inherited from: `Iterable<Element,Absent>` `Iterable.any()`, `Iterable.by()`, `Iterable.chain()`, `Iterable.collect()`, `Iterable.count()`, `Iterable.defaultNullElements()`, `Iterable.every()`, `Iterable.filter()`, `Iterable.find()`, `Iterable.findLast()`, `Iterable.flatMap()`, `Iterable.fold()`, `Iterable.follow()`, `Iterable.getFromFirst()`, `Iterable.interpose()`, `Iterable.iterator()`, `Iterable.longerThan()`, `Iterable.map()`, `Iterable.max()`, `Iterable.partition()`, `Iterable.product()`, `Iterable.reduce()`, `Iterable.repeat()`, `Iterable.scan()`, `Iterable.select()`, `Iterable.sequence()`, `Iterable.shorterThan()`, `Iterable.skip()`, `Iterable.skipWhile()`, `Iterable.sort()`, `Iterable.spread()`, `Iterable.take()`, `Iterable.takeWhile()`
Methods inherited from: `List<Element>` `List.endsWith()`, `List.equals()`, `List.firstInclusion()`, `List.firstIndexWhere()`, `List.firstOccurrence()`, `List.getFromLast()`, `List.includes()`, `List.includesAt()`, `List.inclusions()`, `List.indexesWhere()`, `List.initial()`, `List.lastInclusion()`, `List.lastIndexWhere()`, `List.lastOccurrence()`, `List.occurrences()`, `List.occurs()`, `List.occursAt()`, `List.patch()`, `List.slice()`, `List.startsWith()`, `List.sublist()`, `List.sublistFrom()`, `List.sublistTo()`, `List.terminal()`, `List.trim()`, `List.trimLeading()`, `List.trimTrailing()`
Methods inherited from: `Ranged<Index,Element,Subrange>` `Ranged.measure()`, `Ranged.span()`, `Ranged.spanFrom()`, `Ranged.spanTo()`
Methods inherited from: `Element[]` `Sequential.append()`, `Sequential.prepend()`, `Sequential.withLeading()`, `Sequential.withTrailing()`