     }
 }
 
+/// An event that is triggered once the `Selector` was able to select something.
 struct SelectorEvent<R> {
     public let registration: R
     public let io: IOEvent
     
+    /// Create new instance
+    ///
+    /// - parameters:
+    ///     - readable: `true` if readable.
+    ///     - writable: `true` if writable
+    ///     - registration: The registration that belongs to the event.
     init(readable: Bool, writable: Bool, registration: R) {
         if readable {
             io = writable ? .all : .read

#endif
    }

     func whenReady(strategy: SelectorStrategy, _ fn: (SelectorEvent<R>) throws -> Void) throws -> Void {
        guard self.lifecycleState == .open else {
            throw IOError(errnoCode: EBADF, reason: "can't call whenReady for selector as it's \(self.lifecycleState).")
        }

        reg.interested = interested
        registrations[Int(selectable.descriptor)] = reg
    }
    
    /// Deregister `Selectable`, must be registered via `register` before.
    ///
    /// After the `Selectable is deregistered no `IOEvent`s will be produced anymore for the `Selectable`.
    ///
    /// - parameters:
    ///     - selectable: The `Selectable` to deregister.
    func deregister<S: Selectable>(selectable: S) throws {
        guard self.lifecycleState == .open else {
            throw IOError(errnoCode: EBADF, reason: "can't deregister from selector as it's \(self.lifecycleState).")
