   }
 }
 
-@public enum DictionaryGenerator<KeyType : Hashable, ValueType> : Generator {
+enum _DictionaryGeneratorRepresentation<KeyType : Hashable, ValueType> {
+  typealias _Generator = DictionaryGenerator<KeyType, ValueType>
+  typealias _NativeIndex = _Generator._NativeIndex
+  case _Native(start: _NativeIndex, end: _NativeIndex)
+  case _Cocoa(_CocoaDictionaryGenerator)
+}
+
+@public
+struct DictionaryGenerator<KeyType : Hashable, ValueType> : Generator {
   // Dictionary has a separate Generator and Index because of efficiency
   // and implementability reasons.
   //

      return ._Native(_nativeIndex.predecessor())
    }

    switch self {
    case ._Native(let nativeIndex):
      return ._Native(nativeIndex.predecessor())
    case ._Cocoa(let cocoaIndex):

  }

  mutating func _nativeNext() -> (KeyType, ValueType)? {
    switch state {
    case ._Native(var startIndex, var endIndex):
      if startIndex == endIndex {
        return .None
      }
      let result = startIndex.nativeStorage.assertingGet(startIndex)
      state = ._Native(start: startIndex.successor(), end: endIndex)
      return result
    case ._Cocoa:
      _fatalError("internal error: not backed by NSDictionary")
    }
  }

