 }
 
 extension Sequence where Iterator.Element: Keyed {
+    /**
+     Returns a set up of typed `Key<T>`.
+     
+     Any of the underlying keys whose type is not `T` 
+     will simply be omitted, so this is also a way
+     to filter a sequence of keys by type.
+    */
     public func typedKeys<T>() -> Set<Key<T>> {
         return Set<Key<T>>(flatMap{ Key($0) })
     }
     
+    /**
+     Returns a set of untyped `AnyKey`.
+     
+     This is a convenient way to turn a set of typed
+     keys into a set of untyped keys.
+    */
     public func untypedKeys() -> Set<AnyKey> {
         return Set(map{ AnyKey($0) })
     }

    /**
     Register the `resolution` block with the result type `T` and the parameter `P`.
     
     - returns: The unique `Key` for this registration.
     
     - parameters:
        - name: The name under which to register the block.

    /**
     Register the `resolution` block with the result type `T` and the parameter `P`.
     
     - returns: The unique `Key<T>` for this registration.
     
     - parameters:
         - metadata: Arbitrary metadata associated with this registration.
