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

}

public protocol MyRandomAccessCollectionType : MyBidirectionalCollectionType {
  typealias Index : MyRandomAccessIndex
}

public struct DefaultUnownedForwardCollection<Collection : MyForwardCollectionType> {

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

public protocol MyStrideable : Comparable {
  associatedtype Distance : SignedNumberType

  @warn_unused_result
  func distanceTo(other: Self) -> Distance
