<div dir="ltr">I think for me, the big difference between a color literal and URL literal, which swayed me in the end was this:<br><div><div><br></div><div>As noted in SE-0039, `[#Color(...)#]` (now `#colorLiteral(...)`) isn&#39;t itself a literal; it&#39;s a spelling that allows you to _get_ a literal, which is a swatch of color. On reflection, whether these things ought to be termed &quot;literals&quot; exactly like strings is something maybe worth revisiting. They certainly have benefits (_seeing_ a color is nice), but still, consider how they differ from string literals, etc:</div><div><br></div><div>To me at least, `&quot;foo&quot;` _is_ literally a string and `0` is literally an integer, both of no particular type until it&#39;s assigned to a variable, which is what literals make possible. By the same token, almost any power user of computers can recognize that `&lt;<a href="http://google.com/">http://google.com/</a>&gt;` _is_ literally a URL and `/regex/` _is_ literally a regular expression. I&#39;ll call these &quot;true literals&quot; for the moment. There are, naturally, a limited number of true literals in the world, and that upper bound is not an artificial limit of any programming language. For that reason, I think we ought not be concerned about &quot;running out&quot; of delimiters.<br></div></div><div><br></div><div>Even as I continue to believe that a constexpr-like facility might be the best holistic solution for those who need compile-time validation of custom types, I can now see that there are grounds to regard a URL as something special, a true literal for which there is a rational basis for first-class support from the compiler.</div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 29, 2016 at 3:49 PM, Xiaodi Wu <span dir="ltr">&lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><span class="gmail-"><div>On Thu, Dec 29, 2016 at 3:18 PM, Micah Hainline <span dir="ltr">&lt;<a href="mailto:micah.hainline@gmail.com" target="_blank">micah.hainline@gmail.com</a>&gt;</span> wrote:<br></div></span><div class="gmail_extra"><div class="gmail_quote"><span class="gmail-"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I think that&#39;s all doable. I&#39;m not sure what delimiters would be the<br>
best though, which is why I hadn&#39;t moved away from #url yet. I&#39;ve been<br>
thinking hard about the regex, which seems like an even stronger case<br>
to make into a literal, and /abc/ works well for those, but even those<br>
have some problems, as an empty regex (valid according to<br>
NSRegularExpression) of // would parse also as a comment.</blockquote><div><br></div></span><div>True, but I doubt that&#39;s a common use case. JavaScript supports `/regex/` and I haven&#39;t heard of complaints re not supporting `//`.</div><span class="gmail-"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">For &lt; and &gt;<br>
it could start getting confusing with overloaded operators. I think it<br>
would work, but could be a little trickier than it seems like on first<br>
blush.<br></blockquote><div><br></div></span><div>Besides being a natural way of writing it, &lt; and &gt; have the advantage that resolving their different uses is already heavily tested (because generics use &lt;&gt;, and because the lexer understands merging artifacts like &lt;&lt;&lt;&lt;&lt;&lt; and &gt;&gt;&gt;&gt;&gt;&gt;).</div><span class="gmail-"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
It would be easier to lex if it were expressed like<br>
#url&lt;<a href="https://example.com" rel="noreferrer" target="_blank">https://example.com</a>&gt;, but ease of lexing probably doesn&#39;t weigh<br>
that heavily. If we wanted to do more than string, url, and regex we&#39;d<br>
start running out of delimiters fast though...<br></blockquote><div><br></div></span><div>To me, that&#39;s a feature, not a bug. I&#39;d argue that the language should provide first-class support for only a few, very important literals (like strings). Compile time validation for arbitrary types, as I&#39;ve said before, should probably be solved in other, more holistic ways (such as some sort of constexpr-like feature).</div><span class="gmail-"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Another idea (taking from ruby a little) would be to have something<br>
like %url{<a href="https://example.com" rel="noreferrer" target="_blank">https://example.com</a>} and %regex{my/regex}<br>
<br>
In ruby, their %r{} structure can take things other than {} as long as<br>
they don&#39;t appear in the string (for instance %r@my/regex@ works too),<br>
we could do something like that and have a pretty robust structure for<br>
whatever literals we wanted going forward, and it should work for url<br>
and regex, which are in the more immediate future. Of course, % could<br>
just as easily be #.</blockquote><div><br></div></span><div>We had that before, essentially. Object literals (file, image, color) were spelled like this: [#Color(...)#]. They were removed with SE-0039.</div><div><div class="gmail-h5"><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="gmail-m_-5930708057526222407HOEnZb"><div class="gmail-m_-5930708057526222407h5">
On Thu, Dec 29, 2016 at 12:37 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br>
&gt; Micah,<br>
&gt;<br>
&gt; I think I&#39;m coming round to your line of thinking re URL literals. It&#39;d be<br>
&gt; nice to have them supported first-class, not like image literals (the design<br>
&gt; for which is really geared towards playgrounds and is rather hacky, IMO),<br>
&gt; but like strings. In that scenario, Foundation URL would conform to<br>
&gt; ExpressibleByURLLiteral. URL could even be the default URLLiteralType once<br>
&gt; Foundation is imported (just like String is the default StringLiteralType).<br>
&gt;<br>
&gt; What&#39;d be _really_ nice, though, is to solidify the first-class status of<br>
&gt; URL literals by their spelling: not `#urlLiteral(resourceName: &quot;blahblah&quot;)`<br>
&gt; or even `#url(&quot;blahblah&quot;)`, but just as you write `let str = &quot;this is a<br>
&gt; string&quot;` (and I&#39;m sure we&#39;ll have `let regex = /foo/`), we should have `let<br>
&gt; url = &lt;<a href="https://google.com/" rel="noreferrer" target="_blank">https://google.com/</a>&gt;`. The compiler would ensure that what&#39;s between<br>
&gt; the delimiters is a valid relative or absolute URL, and `init(urlLiteral:)`<br>
&gt; will get a parsed tuple just as the official standard outlines, with scheme,<br>
&gt; username, password, host, port, cannot-be-a-base-URL flag, path, query,<br>
&gt; fragment all ready to go. Looking through the lexer, it seems like this<br>
&gt; _should_ be possible and not inordinate amounts of work. Any thoughts about<br>
&gt; this idea, since you&#39;re actively studying the lexer?<br>
&gt;<br>
&gt; Xiaodi<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Dec 28, 2016 at 5:18 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; PR #6503. Turned out to be trivial.<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Dec 28, 2016 at 4:38 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Not yet, still building locally. My computer&#39;s slow. There&#39;s one problem<br>
&gt;&gt;&gt; that&#39;s apparent though. Here&#39;s an existing test in the repo:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ```<br>
&gt;&gt;&gt; LiteralsTestSuite.test(&quot;image&quot;<wbr>) {<br>
&gt;&gt;&gt;   let image = #imageLiteral(resourceName: NSImageNameComputer)<br>
&gt;&gt;&gt;   expectTrue(image.isValid)<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt; ```<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Unfortunately, although `NSImageNameComputer` is a constant, it&#39;s of type<br>
&gt;&gt;&gt; `String`. And tweaking global Obj-C bridging rules so that `NSString *<br>
&gt;&gt;&gt; const` comes through as `StaticString` is just not gonna happen, because of<br>
&gt;&gt;&gt; all the things you&#39;d break. We&#39;ll lose this (kinda useful) use of<br>
&gt;&gt;&gt; #imageLiteral unless someone goes ahead and manually bridges the<br>
&gt;&gt;&gt; NSImageName* constants, which is acceptable, I suppose. That someone would<br>
&gt;&gt;&gt; have to be the Foundation team, because Foundation APIs aren&#39;t really<br>
&gt;&gt;&gt; subject to Evolution.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Wed, Dec 28, 2016 at 4:29 PM, Micah Hainline<br>
&gt;&gt;&gt; &lt;<a href="mailto:micah.hainline@gmail.com" target="_blank">micah.hainline@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Do you have it checked in somewhere I can see it?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Wed, Dec 28, 2016 at 2:51 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt; I may be wrong, but I think I&#39;ve fixed it. Will test and make sure.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; On Wed, Dec 28, 2016 at 3:22 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Well, let&#39;s stop that :)<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; On Wed, Dec 28, 2016 at 3:21 PM, Micah Hainline<br>
&gt;&gt;&gt;&gt; &gt;&gt; &lt;<a href="mailto:micah.hainline@gmail.com" target="_blank">micah.hainline@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; Yep, compiles, runs, no warnings or errors and the program displays<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; the expected results.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; On Wed, Dec 28, 2016 at 2:12 PM, Micah Hainline<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &lt;<a href="mailto:micah.hainline@gmail.com" target="_blank">micah.hainline@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt; Good question. It certainly compiles, but I&#39;ve stuck it in an<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt; out-of-the-way spot, I&#39;ll need to create a test project to know<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt; answer to that. Just FYI: <a href="https://bugs.swift.org/browse/SR-3504" rel="noreferrer" target="_blank">https://bugs.swift.org/browse/<wbr>SR-3504</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt; On Wed, Dec 28, 2016 at 2:11 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; Does it run?<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; On Wed, Dec 28, 2016 at 3:10 PM, Micah Hainline<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &lt;<a href="mailto:micah.hainline@gmail.com" target="_blank">micah.hainline@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; I&#39;m doing it in a normal project rather than a playground.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; On Wed, Dec 28, 2016 at 1:50 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; Offlist--<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; In a playground, I get a runtime error when I move the string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; into<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; variable and write `#fileLiteral(resourceName: &quot;\(myVar)&quot;)`.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; Could<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; be<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; doing<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; it wrong though.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; I&#39;ll submit a PR to document that users should not use the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; technically<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; public APIs for literals.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; On Wed, Dec 28, 2016 at 2:44 PM, Micah Hainline via<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; swift-evolution<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; I think the way it&#39;s set up it probably WOULD run, but it<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; should<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; still<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; probably be a compile error. I like that we have the concept<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; static-string-literal in the language definition, but I&#39;m<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; having a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; bit<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; of a hard time tracking it through the compiler. Of course,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; these<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; are<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; problems probably not right for this list, so I&#39;ll take them<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; into<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; bug instead.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; On Wed, Dec 28, 2016 at 1:36 PM, Xiaodi Wu<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; On Wed, Dec 28, 2016 at 2:29 PM, Micah Hainline via<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; swift-evolution<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; SE-0039 says that resourceName should be a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; static-string-literal<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; It compiles just fine for me in my project. My next<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; question<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; was<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; going<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; to be do we actually need a change in the language spec,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; or can<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; we<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; call fixing that a bug, I think you&#39;re answering my<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; question<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; for me<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; before I even had to ask it!<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; I&#39;d call that a bug. It doesn&#39;t run, and there&#39;s no reason<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; why<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; something<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; not<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; allowed by the grammar shouldn&#39;t be diagnosed at compile<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; time,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; IMO.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; From _The Swift Programming Language_:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; GRAMMAR OF A STRING LITERAL<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; string-literal → static-string-literal­ |<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; interpolated-string-literal­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; static-string-literal → &quot;­quoted-text­opt­&quot;­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; quoted-text → quoted-text-item­ quoted-text­opt­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; quoted-text-item → escaped-character­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; quoted-text-item → Any Unicode scalar value except &quot;­, \­,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; U+000A, or<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; U+000D<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; interpolated-string-literal → &quot;­interpolated-text­opt­&quot;­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; interpolated-text → interpolated-text-item­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; interpolated-text­opt­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; interpolated-text-item → \(­expression­)­ |<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; quoted-text-item­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; escaped-character → \0­ | \\­ | \t­ | \n­ | \r­ | \&quot;­ | \&#39;­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; escaped-character → \u­{­unicode-scalar-digits­}­<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; unicode-scalar-digits → Between one and eight hexadecimal<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; digit<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; On Wed, Dec 28, 2016 at 1:20 PM, Xiaodi Wu<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; On Wed, Dec 28, 2016 at 2:08 PM, Micah Hainline via<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; swift-evolution<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; As an aide to learning I&#39;ve been playing around with<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; implementation<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; some of these concepts in the compiler and a few things<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; popped up<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; that<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; I&#39;m not happy with.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; First, regarding the way #fileLiteral works, it<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; necessitates<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; addition of URL.init(fileReferenceLiteralR<wbr>esourceName:)<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; which<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; takes<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; string but does not return an optional value. Fine,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; except<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; that I<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; don&#39;t have to call #fileLiteral in my code to use that<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; constructor,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; I<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; can also use it directly. While I could get<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; compile-time<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; checking<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; on<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; the #fileLiteral, I can&#39;t on the direct constructor.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Additionally, I<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; could use the direct constructor with any String, not<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; just<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; literals.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Internally that will call ```self =<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Bundle.main.url(forResource:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; name,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; withExtension: nil)!``` and crash at runtime if it&#39;s<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; not<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; found.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Clearly we do not intend that init to be called<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; directly,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; but<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; that<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; isn&#39;t clear to new Swift user Jude Doe, who discovers<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; API as<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; xe<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; autocompletes from Xcode.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; That could be fixed with documentation. This API design<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; was<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; reviewed<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; approved as part of SE-0039:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0039-playgroundliterals.md" rel="noreferrer" target="_blank">https://github.com/apple/swift<wbr>-evolution/blob/master/proposa<wbr>ls/0039-playgroundliterals.md</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; The second problem comes from String Interpolation.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; It&#39;s a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; basic<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; problem I think with anything that extends the concept<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; string_literal with additional requirements that need<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; to be<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; checked<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; at<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; compile-time. Right now I can put in something like<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; ```#fileLiteral(resourceName: &quot;\(myString)&quot;)```.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Can you? SE-0039 says that resourceName should be a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; static-string-literal,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; which (unless I&#39;m mistaken) should forbid interpolation.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; While at one level it<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; might seem nice to be able to construct this sort of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; thing,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; it&#39;s<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; not<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; at all nice from a validation perspective.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; I think this has to be solved at a higher level, in the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Lexer,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; making<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; a url literal a concept at that level, and<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; fundamentally NOT<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; literal underneath, even if they shared some similar<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; constructs.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; The Lexer would be able to see #url(&quot;https://\(host)&quot;)<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; and<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; say<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &quot;Invalid escape sequence in literal, \( is not<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; understood as<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; url&quot;.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; In fact, the URL literal should probably not need ANY<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; escape<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; sequences<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; or even the concept of escape sequences, since a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; double-quote is<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; not<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; legal character in a URL.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; I definitely think we should take this opportunity to<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; identify<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; that<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; we<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; do NOT want to use string literal as it currently<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; stands as<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; base<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; construct for other literal types. Quite possibly<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; there&#39;s<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; another,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; more restricted concept that we can draw out of string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; literal<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; that<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; would make a good base construct, but certainly not a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; literal<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; with interpolation.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; On Wed, Dec 28, 2016 at 8:01 AM, Jonathan Hull via<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; swift-evolution<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; On Dec 27, 2016, at 11:46 AM, David Sweeris<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:davesweeris@mac.com" target="_blank">davesweeris@mac.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; On Dec 22, 2016, at 11:39 PM, Jonathan Hull<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:jhull@gbis.com" target="_blank">jhull@gbis.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; On Dec 20, 2016, at 12:29 PM, David Sweeris<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:davesweeris@mac.com" target="_blank">davesweeris@mac.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; On Dec 20, 2016, at 2:11 AM, Jonathan Hull via<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; swift-evolution<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Yes, I agree.  I am excited to see what happens in<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; phase<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; 2.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; What I am suggesting here is slightly different.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Basically<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; being<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; able<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; use<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; RegEx (with capture groups) as a shorthand for a type<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; composed<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; base<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; literals. For example: (StringLiteral,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; [IntegerLiteral]).<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Named<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; capture<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; groups could even map to a dictionary literal.  I am<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; using<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; “RegEx<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; goes<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Here”<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; to represent RegEx in the examples below, but<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; hopefully it<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; will<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; get<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; it’s<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; own<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; literal type in Xcode (Imagine that replacing it<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; here).<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; func foo( _ param: “RegExGoesHere”) {…} //Definition<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; uses<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; RegEx<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; where<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; type would normally be<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; foo(“my parseable string&quot;) //Calling with a string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; literal<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; In this case, ‘param’ takes a string literal when<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; called<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; but<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; compiler<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; converts it to a tuple of literals based on the regEx<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; supplied<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; passes<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; that tuple the function. The type/structure of the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; tuple<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; is<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; defined<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; by<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; capture groups in the RegEx<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; The parameter above would only allow string literals<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; to be<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; passed<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; in,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; would give a compiler error if you tried to pass a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; variable or<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; if<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; didn’t conform to the supplied RegEx.  To allow<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; passing<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; String<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; variables<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; you<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; would have to add either ‘?’ or ‘!’ after the RegEx<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; definition<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; handle<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; case where the value doesn’t conform.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; func foo( _ param: “RegExGoesHere”?) {…} //‘param&#39; is<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; nil<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; if<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; RegEx<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; fails<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; foo(myStringVar) //Calling<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; func bar( _ param: “RegExGoesHere”!) {…} //fatal<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; error if<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; RegEx<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; fails<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; When a variable is passed, the RegEx is performed at<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; runtime<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; instead<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; compile time.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Once you have this, the syntax to add new literal<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; types/initializers<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; falls<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; out virtually for free.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Is “RegExGoesHere” where the regex pattern goes, or<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; where<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; you’re<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; trying to match goes? If it’s the latter, where does<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; pattern<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; go?<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; If<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; it’s<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the former, where does the string you’re trying to<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; match<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; go?<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; “RegExGoesHere” is where the pattern goes (instead of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; type).<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; The<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; string<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; you are trying to match gets passed in as the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; parameter<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; (e.g.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; “my<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; parseable<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; string”).<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Ah, ok, I think I understand what you’re saying<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; now...<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; You’re<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; suggesting<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; that instead of defining a custom type that conforms<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; “RegExLiteral”<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; (or<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; some other mechanism) and using that as the<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; parameter’s<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; type,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; you<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; put<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; your<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; regex pattern as the type directly?<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Yes.  It is admittedly an advanced feature, but I<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; think it<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; would<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; be a<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; useful<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; one.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Thanks,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Jon<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
</div></div></blockquote></div></div></div><br></div></div>
</blockquote></div><br></div></div>