  - note: See the documentation of the `Keyed` protocol for a fuller
  discussion of keys.
  */
-public struct Key<T>: EquatableKeyed {
+public struct Key<T>: Keyed, Hashable {
     public let type: String
     public let name: AnyHashable
     public let container: AnyHashable

 - note: See the documentation of the `Keyed` protocol for a fuller
 discussion of keys.
*/
public struct AnyKey: EquatableKeyed {
    public let type: String
    public let name: AnyHashable
    public let container: AnyHashable

    init?<T, N: Hashable, C: Hashable>(type: T.Type, name: N, container: C)
}

public func ==<K: Keyed & Hashable>(lhs: K, rhs: K) -> Bool {
    if lhs.hashValue != rhs.hashValue { return false }
    if lhs.type != rhs.type { return false }
    if lhs.name != rhs.name { return false }
