     }
 }
 
+/// 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

        reg.interested = interested
        registrations[Int(selectable.descriptor)] = reg
    }

    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).")

    }
#endif

    /// Register `Selectable` on the `Selector`.
    ///
    /// - parameters:
    ///     - selectable: The `Selectable` to register.
    ///     - interested: The `IOEvent`s in which we are interested and want to be notified about.
    ///     - makeRegistration: Creates the registration data for the given `IOEvent`.
    func register<S: Selectable>(selectable: S, interested: IOEvent = .read, makeRegistration: (IOEvent) -> R) throws {
        guard self.lifecycleState == .open else {
            throw IOError(errnoCode: EBADF, reason: "can't register on selector as it's \(self.lifecycleState).")
