             }
         }
     }
+}
+
+extension EventBus : EventChainable {
 
     public func attach(chain: EventNotifyable) {
         self.serialQueue.sync {

            self.subscribed = [:]
        }
    }

    public func notify<T>(_ eventType: T.Type, closure: @escaping (T) -> ()) {
        self.serialQueue.sync {

    func remove<T>(subscriber: T, for eventType: T.Type)
    func remove<T>(subscriber: T)
    func removeAllSubscribers()
}

public protocol EventChainable {
    func attach(chain: EventNotifyable)
    func detach(chain: EventNotifyable)
    func detachAllChains()
