 
 public struct WeakDictionary<Key : Hashable & Comparable, Value : AnyObject> : Collection {
     
-    public typealias Index = DictionaryIndex<Key, WeakDictionaryIndex<Key, Value>>
+    public typealias Index = DictionaryIndex<Key, WeakDictionaryReference<Key, Value>>
     
-    private var storage: Dictionary<Key, WeakDictionaryIndex<Key, Value>>
+    private var storage: Dictionary<Key, WeakDictionaryReference<Key, Value>>
     
     public init() {
-        storage = Dictionary<Key, WeakDictionaryIndex<Key, Value>>()
+        storage = Dictionary<Key, WeakDictionaryReference<Key, Value>>()
     }
     
-    private init(withStorage s: Dictionary<Key, WeakDictionaryIndex<Key, Value>>) {
+    private init(withStorage s: Dictionary<Key, WeakDictionaryReference<Key, Value>>) {
         storage = s
     }
     

        return storage.index(after: i)
    }
    
    public subscript(position: Index) -> WeakDictionaryIndex<Key, Value> {
        get {
            let v = storage.values[position]
            return v

                return
            }
            
            storage[key] = WeakDictionaryReference<Key, Value>(key: key, value: value)
        }
    }
    
