<html><head><style>
body {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        padding:1em;
        margin:auto;
        background:#fefefe;
}

h1, h2, h3, h4, h5, h6 {
        font-weight: bold;
}

h1 {
        color: #000000;
        font-size: 28pt;
}

h2 {
        border-bottom: 1px solid #CCCCCC;
        color: #000000;
        font-size: 24px;
}

h3 {
        font-size: 18px;
}

h4 {
        font-size: 16px;
}

h5 {
        font-size: 14px;
}

h6 {
        color: #777777;
        background-color: inherit;
        font-size: 14px;
}

hr {
        height: 0.2em;
        border: 0;
        color: #CCCCCC;
        background-color: #CCCCCC;
    display: inherit;
}

p, blockquote, ul, ol, dl, li, table, pre {
        margin: 15px 0;
}

a, a:visited {
        color: #4183C4;
        background-color: inherit;
        text-decoration: none;
}

#message {
        border-radius: 6px;
        border: 1px solid #ccc;
        display:block;
        width:100%;
        height:60px;
        margin:6px 0px;
}

button, #ws {
        font-size: 12 pt;
        padding: 4px 6px;
        border-radius: 5px;
        border: 1px solid #bbb;
        background-color: #eee;
}

code, pre, #ws, #message {
        font-family: Monaco;
        font-size: 10pt;
        border-radius: 3px;
        background-color: #F8F8F8;
        color: inherit;
}

code {
        border: 1px solid #EAEAEA;
        margin: 0 2px;
        padding: 0 5px;
}

pre {
        border: 1px solid #CCCCCC;
        overflow: auto;
        padding: 4px 8px;
}

pre > code {
        border: 0;
        margin: 0;
        padding: 0;
}

#ws { background-color: #f8f8f8; }


.bloop_markdown table {
border-collapse: collapse;  
font-family: Helvetica, arial, freesans, clean, sans-serif;  
color: rgb(51, 51, 51);  
font-size: 15px; line-height: 25px;
padding: 0; }

.bloop_markdown table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
     
.bloop_markdown table tr:nth-child(2n) {
background-color: #f8f8f8; }

.bloop_markdown table tr th {
font-weight: bold;
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }

.bloop_markdown table tr td {
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }

.bloop_markdown table tr th :first-child, table tr td :first-child {
margin-top: 0; }

.bloop_markdown table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }

.bloop_markdown blockquote{
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777; }
  blockquote > :first-child {
    margin-top: 0; }
  blockquote > :last-child {
    margin-bottom: 0; }

code, pre, #ws, #message {
    word-break: normal;
    word-wrap: normal;
}

hr {
    display: inherit;
}

.bloop_markdown :first-child {
    -webkit-margin-before: 0;
}

code, pre, #ws, #message {
    font-family: Menlo, Consolas, Liberation Mono, Courier, monospace;
}


.send { color:#77bb77; }
.server { color:#7799bb; }
.error { color:#AA0000; }</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="bloop_markdown"><p>At first glance this doesn’t make any sense to me:</p>

<pre><code class="swift">public protocol ExpressibleByNilLiteral {
  associatedtype NilLiteralType = Nil
  init(nilLiteral: NilLiteralType)
}
</code></pre>

<p>What’s the need for <code>associatedtype</code> there?</p>

<p>Shouldn’t it be just like this:</p>

<pre><code class="swift">public protocol ExpressibleByNilLiteral {

  init(nilLiteral: Nil)
}
</code></pre>

<hr>

<p>I actually would appreciate this change, because of one thing I run into a few days ago.</p>

<p>I’m building a library for BSON (Binary JSON) where I have a struct <code>Document</code> which conforms to <code>ExpressibleByDictionaryLiteral</code>. Than I have a protocol which can convert any type to a value type my document can store.</p>

<p>Now I would have to choose how to implement <code>ExpressibleByDictionaryLiteral</code>:</p>

<ol>
<li><p><code>public init(dictionaryLiteral elements: (String, Element.Value)...)</code></p></li>
<li><p><code>public init(dictionaryLiteral elements: (String, ElementValueConvertible)…)</code></p></li>
</ol>

<p>If I would go for the second version, I’d lose the <code>ExpressibleByNilLiteral</code> from my value type but I could use every other type naturally. </p>

<p>With the proposed change I could extend <code>Nil</code> with my protocol and make the conversion naturally again.</p>

<p>That is the only advantage I would gain from such a change in the language. </p>

<p></p></div><div class="bloop_original_html"><style>body{font-family:Helvetica,Arial;font-size:13px}</style><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div> <br> <div id="bloop_sign_1478637337927731968" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 8. November 2016 um 21:30:26, Anton Zhilin via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>


<title></title>


<div dir="ltr">
<div class="markdown-here-wrapper" style="">
<p style="margin:0px 0px 1.2em!important"><a href="https://gist.github.com/Anton3/ba56a29986c59e9595368be3cb02fb1b">Gist
link</a></p>
<h2 id="introduction" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom:1px solid rgb(238,238,238)">
Introduction</h2>
<p style="margin:0px 0px 1.2em!important">Change <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
nil</code> literal type from <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
()</code> to <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Nil</code>.<br>
Before:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)">public <span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ExpressibleByNilLiteral</span> </span>{
  <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(nilLiteral: ())
}
</code></pre>
<p style="margin:0px 0px 1.2em!important">After:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)">public <span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Nil</span> </span>{
  <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>()
}
public <span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ExpressibleByNilLiteral</span> </span>{
  associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">NilLiteralType</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Nil</span>
  <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(nilLiteral: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">NilLiteralType</span>)
}
</code></pre>
<h2 id="motivation" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom:1px solid rgb(238,238,238)">
Motivation</h2>
<p style="margin:0px 0px 1.2em!important">Currently, <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
nil</code> differs from other literals: it doesn’t have its own
type.<br>
But in some cases we want to deal directly with it, without
creating any instances.</p>
<p style="margin:0px 0px 1.2em!important">The most important use
case is comparison of an <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Optional</code> to <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
nil</code>.<br>
Currently, this operation is implemented using a hidden struct
<code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
_OptionalNilComparisonType</code>,<br>
which is needed precisely because because <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
nil</code> does not have its own type.<br>
Removal of such underscored types is one of the goals stated in
Generics manifesto.</p>
<p style="margin:0px 0px 1.2em!important">Additionally, declaration
of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
ExpressibleByNilLiteral</code> differs from all other <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Expressible</code>s,<br>
because it doesn’t have a <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Literal</code> type. It is generally beneficial to eliminate
special cases.</p>
<h2 id="proposed-solution" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom:1px solid rgb(238,238,238)">
Proposed solution</h2>
<p style="margin:0px 0px 1.2em!important">Introduce a struct
<code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Nil</code>, which becomes the default type for <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
nil</code> literals:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)">public <span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">Nil</span> : <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ExpressibleByNilLiteral</span> </span>{
  <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>()
  <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(nilLiteral: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">NilLiteralType</span>)
}

<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> a = <span class="hljs-built_in" style="color:rgb(0,134,179)">nil</span>
<span class="hljs-built_in" style="color:rgb(0,134,179)">print</span>(type(of: a))   <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">//=&gt; Nil</span>
</code></pre>
<p style="margin:0px 0px 1.2em!important">Rewrite <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
ExpressibleByNilLiteral</code>:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)">public <span class="hljs-class"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">protocol</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">ExpressibleByNilLiteral</span> </span>{
  associatedtype <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">NilLiteralType</span> = <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Nil</span>
  <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">init</span>(nilLiteral: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">NilLiteralType</span>)
}
</code></pre>
<p style="margin:0px 0px 1.2em!important">Make use of <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Nil</code> in the standard library:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-swift" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)">public <span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> == <span class="hljs-generics">&lt;T&gt;</span><span class="hljs-params">(<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">left</span>: T?, <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">right</span>: Nil)</span>
<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">public</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> == <span class="hljs-generics">&lt;T&gt;</span><span class="hljs-params">(<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">left</span>: Nil, <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">right</span>: T?)</span>
<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">public</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> != <span class="hljs-generics">&lt;T&gt;</span><span class="hljs-params">(<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">left</span>: T?, <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">right</span>: Nil)</span>
<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">public</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> != <span class="hljs-generics">&lt;T&gt;</span><span class="hljs-params">(<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">left</span>: Nil, <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">right</span>: T?)</span>
<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">public</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">func</span> ~= <span class="hljs-generics">&lt;T&gt;</span><span class="hljs-params">(<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">left</span>: Nil, <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">right</span>: T?)</span></span>
</code></pre>
<h2 id="source-compatibility" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom:1px solid rgb(238,238,238)">
Source compatibility</h2>
<p style="margin:0px 0px 1.2em!important"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Nil</code> identifier is taken, therefore applications that already
use it will stop compiling.<br>
Automatic migration is somewhat possible by renaming of the old
entity; manual migration is recommended.</p>
<p style="margin:0px 0px 1.2em!important">Applications that use
declare <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
ExpressibleByNilLiteral</code> conformances will stop
compiling.<br>
Automatic migration is possible.</p>
<h2 id="effect-on-abi-stability" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom:1px solid rgb(238,238,238)">
Effect on ABI stability</h2>
<p style="margin:0px 0px 1.2em!important">Applications that use
<code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">
Nil</code> identifier will have to make ABI-breaking changes.</p>
<p style="margin:0px 0px 1.2em!important">Otherwise, the change can
mostly be applied in an ABI-compatible manner.</p>
<div title="MDH:PGRpdj5bR2lzdCBsaW5rXShodHRwczovL2dpc3QuZ2l0aHViLmNvbS9BbnRvbjMvYmE1NmEyOTk4 NmM1OWU5NTk1MzY4YmUzY2IwMmZiMWIpPC9kaXY+PGRpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PiMj IEludHJvZHVjdGlvbjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+Q2hhbmdlIGBuaWxgIGxpdGVy YWwgdHlwZSBmcm9tIGAoKWAgdG8gYE5pbGAuPC9kaXY+PGRpdj5CZWZvcmU6PC9kaXY+PGRpdj48 YnI+PC9kaXY+PGRpdj5gYGBzd2lmdDwvZGl2PjxkaXY+cHVibGljIHByb3RvY29sIEV4cHJlc3Np YmxlQnlOaWxMaXRlcmFsIHs8L2Rpdj48ZGl2PiZuYnNwOyBpbml0KG5pbExpdGVyYWw6ICgpKTwv ZGl2PjxkaXY+fTwvZGl2PjxkaXY+YGBgPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BZnRlcjo8 L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmBgYHN3aWZ0PC9kaXY+PGRpdj5wdWJsaWMgc3RydWN0 IE5pbCB7PC9kaXY+PGRpdj4mbmJzcDsgaW5pdCgpPC9kaXY+PGRpdj59PC9kaXY+PGRpdj5wdWJs aWMgcHJvdG9jb2wgRXhwcmVzc2libGVCeU5pbExpdGVyYWwgezwvZGl2PjxkaXY+Jm5ic3A7IGFz c29jaWF0ZWR0eXBlIE5pbExpdGVyYWxUeXBlID0gTmlsPC9kaXY+PGRpdj4mbmJzcDsgaW5pdChu aWxMaXRlcmFsOiBOaWxMaXRlcmFsVHlwZSk8L2Rpdj48ZGl2Pn08L2Rpdj48ZGl2PmBgYDwvZGl2 PjxkaXY+PGJyPjwvZGl2PjxkaXY+IyMgTW90aXZhdGlvbjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk aXY+Q3VycmVudGx5LCBgbmlsYCBkaWZmZXJzIGZyb20gb3RoZXIgbGl0ZXJhbHM6IGl0IGRvZXNu J3QgaGF2ZSBpdHMgb3duIHR5cGUuPC9kaXY+PGRpdj5CdXQgaW4gc29tZSBjYXNlcyB3ZSB3YW50 IHRvIGRlYWwgZGlyZWN0bHkgd2l0aCBpdCwgd2l0aG91dCBjcmVhdGluZyBhbnkgaW5zdGFuY2Vz LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlIG1vc3QgaW1wb3J0YW50IHVzZSBjYXNlIGlz IGNvbXBhcmlzb24gb2YgYW4gYE9wdGlvbmFsYCB0byBgbmlsYC48L2Rpdj48ZGl2PkN1cnJlbnRs eSwgdGhpcyBvcGVyYXRpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBoaWRkZW4gc3RydWN0IGBf T3B0aW9uYWxOaWxDb21wYXJpc29uVHlwZWAsPC9kaXY+PGRpdj53aGljaCBpcyBuZWVkZWQgcHJl Y2lzZWx5IGJlY2F1c2UgYmVjYXVzZSBgbmlsYCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gdHlwZS48 L2Rpdj48ZGl2PlJlbW92YWwgb2Ygc3VjaCB1bmRlcnNjb3JlZCB0eXBlcyBpcyBvbmUgb2YgdGhl IGdvYWxzIHN0YXRlZCBpbiBHZW5lcmljcyBtYW5pZmVzdG8uPC9kaXY+PGRpdj48YnI+PC9kaXY+ PGRpdj5BZGRpdGlvbmFsbHksIGRlY2xhcmF0aW9uIG9mIGBFeHByZXNzaWJsZUJ5TmlsTGl0ZXJh bGAgZGlmZmVycyBmcm9tIGFsbCBvdGhlciBgRXhwcmVzc2libGVgcyw8L2Rpdj48ZGl2PmJlY2F1 c2UgaXQgZG9lc24ndCBoYXZlIGEgYExpdGVyYWxgIHR5cGUuIEl0IGlzIGdlbmVyYWxseSBiZW5l ZmljaWFsIHRvIGVsaW1pbmF0ZSBzcGVjaWFsIGNhc2VzLjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk aXY+IyMgUHJvcG9zZWQgc29sdXRpb248L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkludHJvZHVj ZSBhIHN0cnVjdCBgTmlsYCwgd2hpY2ggYmVjb21lcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBgbmls YCBsaXRlcmFsczo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmBgYHN3aWZ0PC9kaXY+PGRpdj5w dWJsaWMgc3RydWN0IE5pbCA6IEV4cHJlc3NpYmxlQnlOaWxMaXRlcmFsIHs8L2Rpdj48ZGl2PiZu YnNwOyBpbml0KCk8L2Rpdj48ZGl2PiZuYnNwOyBpbml0KG5pbExpdGVyYWw6IE5pbExpdGVyYWxU eXBlKTwvZGl2PjxkaXY+fTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+bGV0IGEgPSBuaWw8L2Rp dj48ZGl2PnByaW50KHR5cGUob2Y6IGEpKSAmbmJzcDsgLy89Jmd0OyBOaWw8L2Rpdj48ZGl2PmBg YDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+UmV3cml0ZSBgRXhwcmVzc2libGVCeU5pbExpdGVy YWxgOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBgc3dpZnQ8L2Rpdj48ZGl2PnB1YmxpYyBw cm90b2NvbCBFeHByZXNzaWJsZUJ5TmlsTGl0ZXJhbCB7PC9kaXY+PGRpdj4mbmJzcDsgYXNzb2Np YXRlZHR5cGUgTmlsTGl0ZXJhbFR5cGUgPSBOaWw8L2Rpdj48ZGl2PiZuYnNwOyBpbml0KG5pbExp dGVyYWw6IE5pbExpdGVyYWxUeXBlKTwvZGl2PjxkaXY+fTwvZGl2PjxkaXY+YGBgPC9kaXY+PGRp dj48YnI+PC9kaXY+PGRpdj5NYWtlIHVzZSBvZiBgTmlsYCBpbiB0aGUgc3RhbmRhcmQgbGlicmFy eTo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmBgYHN3aWZ0PC9kaXY+PGRpdj5wdWJsaWMgZnVu YyA9PSAmbHQ7VCZndDsobGVmdDogVD8sIHJpZ2h0OiBOaWwpPC9kaXY+PGRpdj5wdWJsaWMgZnVu YyA9PSAmbHQ7VCZndDsobGVmdDogTmlsLCByaWdodDogVD8pPC9kaXY+PGRpdj5wdWJsaWMgZnVu YyAhPSAmbHQ7VCZndDsobGVmdDogVD8sIHJpZ2h0OiBOaWwpPC9kaXY+PGRpdj5wdWJsaWMgZnVu YyAhPSAmbHQ7VCZndDsobGVmdDogTmlsLCByaWdodDogVD8pPC9kaXY+PGRpdj5wdWJsaWMgZnVu YyB+PSAmbHQ7VCZndDsobGVmdDogTmlsLCByaWdodDogVD8pPC9kaXY+PGRpdj5gYGA8L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PiMjIFNvdXJjZSBjb21wYXRpYmlsaXR5PC9kaXY+PGRpdj48YnI+ PC9kaXY+PGRpdj5gTmlsYCBpZGVudGlmaWVyIGlzIHRha2VuLCB0aGVyZWZvcmUgYXBwbGljYXRp b25zIHRoYXQgYWxyZWFkeSB1c2UgaXQgd2lsbCBzdG9wIGNvbXBpbGluZy48L2Rpdj48ZGl2PkF1 dG9tYXRpYyBtaWdyYXRpb24gaXMgc29tZXdoYXQgcG9zc2libGUgYnkgcmVuYW1pbmcgb2YgdGhl IG9sZCBlbnRpdHk7IG1hbnVhbCBtaWdyYXRpb24gaXMgcmVjb21tZW5kZWQuPC9kaXY+PGRpdj48 YnI+PC9kaXY+PGRpdj5BcHBsaWNhdGlvbnMgdGhhdCB1c2UgZGVjbGFyZSBgRXhwcmVzc2libGVC eU5pbExpdGVyYWxgIGNvbmZvcm1hbmNlcyB3aWxsIHN0b3AgY29tcGlsaW5nLjwvZGl2PjxkaXY+ QXV0b21hdGljIG1pZ3JhdGlvbiBpcyBwb3NzaWJsZS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2 PiMjIEVmZmVjdCBvbiBBQkkgc3RhYmlsaXR5PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BcHBs aWNhdGlvbnMgdGhhdCB1c2UgYE5pbGAgaWRlbnRpZmllciB3aWxsIGhhdmUgdG8gbWFrZSBBQkkt YnJlYWtpbmcgY2hhbmdlcy48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk90aGVyd2lzZSwgdGhl IGNoYW5nZSBjYW4gbW9zdGx5IGJlIGFwcGxpZWQgaW4gYW4gQUJJLWNvbXBhdGlibGUgbWFubmVy LjwvZGl2PjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">
​</div>
</div>
</div>


_______________________________________________<br>swift-evolution mailing list<br>swift-evolution@swift.org<br>https://lists.swift.org/mailman/listinfo/swift-evolution<br></div></div></span></blockquote></div><div class="bloop_markdown"><p></p></div></body></html>