 //------------
 
 public protocol MyStrideable : Comparable {
-  typealias Distance : SignedNumberType
+  associatedtype Distance : SignedNumberType
 
   @warn_unused_result
   func distanceTo(other: Self) -> Distance

//------------------------------------------------------------------------

public protocol MyIndexableType {
  typealias Index : MyIndexType
  typealias _Element
  typealias UnownedHandle
  var startIndex: Index { get }
  var endIndex: Index { get }
  subscript(i: Index) -> _Element { get }

}

public protocol MyForwardCollectionType : MySequenceType, MyIndexableType {
  associatedtype Generator = DefaultGenerator<Self>
  associatedtype Index : MyIndexType
  associatedtype SubSequence : MySequenceType /* : MyForwardCollectionType */
    = MySlice<Self>
  associatedtype UnownedHandle = Self // DefaultUnownedForwardCollection<Self>
  associatedtype IndexRange : MyIndexRangeType, MySequenceType, MyIndexableType /* : MyForwardCollectionType */
    // FIXME: where IndexRange.Generator.Element == Index
    // FIXME: where IndexRange.Index == Index
    = DefaultForwardIndexRange<Self>
