There are some issues with this proposal:
1. URI parse does not validate, it only parses the components, which means inspecting with URI.new! after URI.parse! does not guarantee it will be parseable and return the same result back.
2. URI.new! (and similar) hide the underlying fields of the URI, making them harder to discover. I believe URI.new! (and similar) are almost always justified when the structs fields are private, which is not the case here, so there is more space for debate
If the main goal is to reduce verbosity, then maybe we should consider tagging all fields as optional, so we have this instead: