public function withScheme(string $scheme): UriInterface
    {
        $scheme = $this->marshalScheme($scheme);

        if ( $this->scheme === $scheme ) {
            return $this;
        }

        $instance = clone $this;
        $instance->scheme = $scheme;
        $instance->calibratePort();

        return $instance;
    }