 
 //===----------------------------------------------------------------------===//
 
-/// This protocol is an implementation detail of `ForwardIndexType`; do
-/// not use it directly.
-///
-/// Its requirements are inherited by `ForwardIndexType` and thus must
-/// be satisfied by types conforming to that protocol.
-public protocol _ForwardIndexType : _Incrementable {
-  /// A type that can represent the number of steps between pairs of
-  /// `Self` values where one value is reachable from the other.
-  ///
-  /// Reachability is defined by the ability to produce one value from
-  /// the other via zero or more applications of `successor`.
-  typealias Distance : _SignedIntegerType = Int
-
-  // See the implementation of Range for an explanation of this
-  // associated type
-  typealias _DisabledRangeIndex = _DisabledRangeIndex_
-}
-
 /// Replace `i` with its `successor()` and return the updated value of
 /// `i`.
 @transparent


/// Do not use this operator directly; call distance(start, end) instead.
public
func ~> <T : _ForwardIndexType>(start:T, rest: (_Distance, T)) -> T.Distance {
  var p = start
  var count: T.Distance = 0
  let end = rest.1

/// This protocol is an implementation detail of `BidirectionalIndexType`; do
/// not use it directly.
public protocol _BidirectionalIndexType
: ForwardIndexType, _BidirectionalIndexDefaultsType {
  mutating func _predecessorInPlace()
}

