   }
 
   @warn_unused_result
-  public func advance(i: Index, by n: Index.Distance) -> Index {
+  public func advance(i: Index, by n: IndexDistance) -> Index {
     _precondition(n >= 0,
       "Can't advance an Index of MyForwardCollectionType by a negative amount")
     return i.advancedBy(n)
   }
 
   @warn_unused_result
-  public func advance(i: Index, by n: Index.Distance, limit: Index) -> Index {
+  public func advance(i: Index, by n: IndexDistance, limit: Index) -> Index {
     _precondition(n >= 0,
       "Can't advance an Index of MyForwardCollectionType by a negative amount")
     let d = i.distanceTo(limit)

  subscript(i: Index) -> Generator.Element { get set }
}

public protocol MyIndexType : Equatable {
  // Move to CollectionType?
  associatedtype Distance : SignedIntegerType = Int
}
public protocol MyIndexRangeType : Equatable {
  associatedtype Index : MyIndexType
  var startIndex: Index { get }

  }
}
extension MyBidirectionalCollectionType
  where
  Index : MyRandomAccessIndex,
  Index.Distance == IndexDistance {

  @warn_unused_result
  public func previous(i: Index) -> Index {
