public function unsubscribe($eventName, $callable)
    {
        if (!isset($this->subscribers[$eventName])) {
            return;
        }
        if ($this->isClosureFactory($callable)) {
            // factory / lazy subscriber
            $callable[0] = $callable[0]();
        }
        foreach ($this->subscribers[$eventName] as $priority => $subscribers) {
            foreach ($subscribers as $k => $v) {
                if ($v !== $callable && $this->isClosureFactory($v)) {
                    $v[0] = $v[0]();
                }
                if ($v === $callable) {
                    unset($subscribers[$k], $this->sorted[$eventName]);
                } else {
                    $subscribers[$k] = $v;
                }
            }
            if ($subscribers) {
                $this->subscribers[$eventName][$priority] = $subscribers;
            } else {
                unset($this->subscribers[$eventName][$priority]);
            }
        }
    }