   }
 }
 extension MyForwardCollectionType
-  where Index : MyRandomAccessIndex {
+  where
+  Index : MyRandomAccessIndex,
+  Index.Distance == IndexDistance {
 
   @warn_unused_result
   public func next(i: Index) -> Index {

  func next(i: Index) -> Index

  @warn_unused_result
  func advance(i: Index, by: Index.Distance) -> Index

  @warn_unused_result
  func advance(i: Index, by: Index.Distance, limit: Index) -> Index

  @warn_unused_result
  func distanceFrom(start: Index, to: Index) -> Index.Distance

  func _failEarlyRangeCheck(index: Index, bounds: MyRange<Index>)


  @inline(__always)
  @warn_unused_result
  internal func _advanceForward(
    i: Index, by n: IndexDistance, limit: Index
  ) -> Index {
    _precondition(n >= 0,
      "Only BidirectionalIndexType can be advanced by a negative amount")

    var i = i
    for var offset: IndexDistance = 0; offset != n && i != limit; offset = offset + 1 {
      _nextInPlace(&i)
    }
    return i
  }

  @warn_unused_result
  public func advance(i: Index, by n: IndexDistance) -> Index {
    return self._advanceForward(i, by: n)
  }

  @warn_unused_result
  public func advance(i: Index, by n: IndexDistance, limit: Index) -> Index {
    return self._advanceForward(i, by: n, limit: limit)
  }

  @warn_unused_result
  public func distanceFrom(start: Index, to end: Index) -> IndexDistance {
    var start = start
    var count: IndexDistance = 0
    while start != end {
      count = count + 1
      _nextInPlace(&start)
