     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()

            self.subscribed = [:]
        }
    }

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

            }
        }
    }
}

extension EventBus : EventChainable {

    public func attach(chain: EventNotifyable) {
        self.serialQueue.sync {
