public function withPath(string $path): Uri
    {
        if ($path === $this->path) {
            return clone $this;
        }

        $path = $this->validatePath($path);

        $new = clone $this;

        $new->path = $path;

        return $new;
    }