public function first(?callable $predicate = null, $default = null)
    {
        if ($predicate === null) {
            return $this->isEmpty() ? $default : reset($this->items);
        }

        foreach ($this->items as $key => $value) {
            if ($predicate($value, $key)) {
                return $value;
            }
        }

        return $default;
    }