public function remove($delegate, bool $all = true) : self
    {
        // When a string was passed, we will need to distinguish what to compare within our search.
        $name = is_string($delegate) ? $delegate : null;

        foreach ($this->delegates as $k => $v) {
            if (($name and $k === $name) or (!$name and $v['delegate'] === $delegate)) {
                unset($this->delegates[$k]);
                $this->applicable = null;

                if ($name or false === $all) {
                    break;
                }
            }
        }

        return $this;
    }