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

}

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

// and avoid keeping a reference to the whole collection.

public protocol MyGeneratorType {
  associatedtype Element
  mutating func next() -> Element?
}
public protocol MySequenceType {
  associatedtype Generator : MyGeneratorType
  associatedtype SubSequence /* : MySequenceType */
  func generate() -> Generator
  @warn_unused_result
  func map<T>(
