 
 /// Do not use this operator directly; call advance(start, n, end) instead.
 @transparent
-public func ~> <T : _RandomAccessIndexType>(
+public func ~> <T : RandomAccessIndexType>(
   start:T, rest:(_Advance, (T.Distance, T))
 ) -> T {
   let n = rest.1.0

  func advancedBy(n: Distance) -> Self
}

/// An *index* that can be offset by an arbitrary number of positions,
/// and can measure the distance to any reachable value, in O(1).
public protocol RandomAccessIndexType
  : BidirectionalIndexType, _RandomAccessIndexType {
  /* typealias Distance : IntegerArithmeticType*/
}

// advance and distance implementations

/// Do not use this operator directly; call distance(start, end) instead.
@transparent
public func ~> <T : _RandomAccessIndexType>(start:T, rest:(_Distance, (T)))
-> T.Distance {
  let end = rest.1
  return start.distanceTo(end)


/// Do not use this operator directly; call advance(start, n) instead.
@transparent
public func ~> <T : RandomAccessIndexType>(
  start:T, rest:(_Advance, (T.Distance))
) -> T {
  let n = rest.1
