Hi, I'd like to propose adding ~URI for constructing URI structs. Here's an example:
iex> ~URI"https://elixir-lang.org" %URI{ scheme: "https", authority: "elixir-lang.org", userinfo: nil, host: "elixir-lang.org", port: 443, path: nil, query: nil, fragment: nil } I believe the advantage is we can make this a macro and thus parse the URI string at compile-time so catch bugs because of incorrect format early (though these are pretty uncommon) and also be a little bit more efficient at runtime. If added, I'm not sure whether ~URI should use URI.parse or URI.new! under the hood so an advice on that would be appreciated. This is a separate but related discussion so while at it, I'd like to propose adding Inspect implementation for URI that would return the sigil: iex> ~URI"https://elixir-lang.org" ~URI"https://elixir-lang.org" I think more compact representation helps e.g. here. Before: iex> Req.new(url: "https://elixir-lang.org") %Req.Request{ method: :get, url: %URI{ scheme: "https", authority: "elixir-lang.org", userinfo: nil, host: "elixir-lang.org", port: 443, path: nil, query: nil, fragment: nil }, headers: [], body: nil, options: %{}, ... } After: iex> Req.new(url: "https://elixir-lang.org") %Req.Request{ method: :get, url: ~URI"https://elixir-lang.org", headers: [], body: nil, options: %{}, ... } On the other hand, seeing the internal representation right away is sometimes useful given the URI format is somewhat subtle. Before: iex> URI.parse("/foo") %URI{ scheme: nil, userinfo: nil, host: nil, port: nil, path: "/foo", query: nil, fragment: nil } iex> URI.parse("//foo") %URI{ scheme: nil, authority: "foo", userinfo: nil, host: "foo", port: nil, path: nil, query: nil, fragment: nil } After: iex> URI.parse("/foo") ~URI"/foo" iex> URI.parse("//foo") ~URI"//foo" I think this downside can be alleviated by adding `IEx.Info` implementation along these lines: iex> i URI.parse("/foo") Term ~URI"/foo" Data type URI Raw representation %URI{ scheme: nil, userinfo: nil, host: nil, port: nil, path: "/foo", query: nil, fragment: nil } -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/9cc29c5e-ca64-42b3-83f8-84c60985efedn%40googlegroups.com.