     }
     
     /**
+     Find the given key.
     */
     public static  func filter<T>(key: Key<T>) -> Set<Key<T>> {
         return lock.read{ registrations[AnyKey(key)] == nil ? [] : [key] }

        self.hashValue = hash(self.type, self.name, self.container)
    }
    
}

extension Sequence where Iterator.Element: TypedKey {
    public func untyped() -> Set<AnyKey> {
        return Set(map{ AnyKey($0) })
    }
}

public func ==<T>(lhs: Key<T>, rhs: Key<T>) -> Bool {

         - resolution: The block to register with Guise.
     
     - warning: If the type contained in `key` is not identical to `T`, an assertion will fail.
    */
    public static func register<P, T>(key: Key<T>, metadata: Any = (), cached: Bool = false, resolution: @escaping Resolution<P, T>) -> Key<T> {
        lock.write { registrations[AnyKey(key)] = Dependency(metadata: metadata, cached: cached, resolution: resolution) }
        return key
