<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><br><br>Sent from my iPad</div><div><br>On Feb 19, 2017, at 11:29 AM, David Waite via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><meta http-equiv="Content-Type" content="text/html charset=utf-8">Just FYI, I solved this issue in my own library (which included a json jpointer implementation) via:<div class=""><span style="font-family: Menlo; font-size: 18px; font-variant-ligatures: no-common-ligatures; color: rgb(196, 34, 117);" class=""><br class=""></span></div><div style="font-size: 8px;" class=""><span style="font-family: Menlo; font-size: 13px; font-variant-ligatures: no-common-ligatures; color: rgb(196, 34, 117);" class="">public</span><span style="font-family: Menlo; font-size: 13px; font-variant-ligatures: no-common-ligatures;" class=""> </span><span style="font-family: Menlo; font-size: 13px; font-variant-ligatures: no-common-ligatures; color: rgb(196, 34, 117);" class="">enum</span><span style="font-family: Menlo; font-size: 13px; font-variant-ligatures: no-common-ligatures;" class=""> SubscriptParameter {</span></div><div class=""><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">case</span><span style="font-variant-ligatures: no-common-ligatures" class=""> string(</span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">String</span><span style="font-variant-ligatures: no-common-ligatures" class="">)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">case</span><span style="font-variant-ligatures: no-common-ligatures" class=""> int(</span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Int</span><span style="font-variant-ligatures: no-common-ligatures" class="">)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; min-height: 21px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(97, 34, 174);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">extension</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #539aa4" class="">SubscriptParameter</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> : </span><span style="font-variant-ligatures: no-common-ligatures" class="">ExpressibleByIntegerLiteral</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">public</span><span style="font-variant-ligatures: no-common-ligatures" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">init</span><span style="font-variant-ligatures: no-common-ligatures" class="">(integerLiteral value: </span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Int</span><span style="font-variant-ligatures: no-common-ligatures" class="">) {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">self</span><span style="font-variant-ligatures: no-common-ligatures" class=""> = .</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">int</span><span style="font-variant-ligatures: no-common-ligatures" class="">(value)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; }</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; min-height: 21px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(97, 34, 174);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">extension</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #539aa4" class="">SubscriptParameter</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> : </span><span style="font-variant-ligatures: no-common-ligatures" class="">ExpressibleByStringLiteral</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(33, 150, 28);" class=""><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;&nbsp;</span><span style="font-variant-ligatures: no-common-ligatures; color: rgb(196, 34, 117);" class="">public</span><span style="font-variant-ligatures: no-common-ligatures;" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: rgb(196, 34, 117);" class="">init</span><span style="font-variant-ligatures: no-common-ligatures;" class="">(stringLiteral value: </span><span style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);" class="">String</span><span style="font-variant-ligatures: no-common-ligatures;" class="">) {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">self</span><span style="font-variant-ligatures: no-common-ligatures" class=""> = .</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">string</span><span style="font-variant-ligatures: no-common-ligatures" class="">(value)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; }</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">public</span><span style="font-variant-ligatures: no-common-ligatures" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">init</span><span style="font-variant-ligatures: no-common-ligatures" class="">(extendedGraphemeClusterLiteral value: </span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">String</span><span style="font-variant-ligatures: no-common-ligatures" class="">) {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">self</span><span style="font-variant-ligatures: no-common-ligatures" class="">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">init</span><span style="font-variant-ligatures: no-common-ligatures" class="">(stringLiteral: value)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; }</span></div><p style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; min-height: 21px;" class=""><span style="font-variant-ligatures: no-common-ligatures;" class="">&nbsp;&nbsp;</span><span style="font-variant-ligatures: no-common-ligatures; color: rgb(196, 34, 117);" class="">public</span><span style="font-variant-ligatures: no-common-ligatures;" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: rgb(196, 34, 117);" class="">init</span><span style="font-variant-ligatures: no-common-ligatures;" class="">(unicodeScalarLiteral value: </span><span style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);" class="">String</span><span style="font-variant-ligatures: no-common-ligatures;" class="">) {</span></p><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">self</span><span style="font-variant-ligatures: no-common-ligatures" class="">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">init</span><span style="font-variant-ligatures: no-common-ligatures" class="">(stringLiteral: value)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; }</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; min-height: 21px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(97, 34, 174);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">extension</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #539aa4" class="">SubscriptParameter</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> : </span><span style="font-variant-ligatures: no-common-ligatures" class="">CustomStringConvertible</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">public</span><span style="font-variant-ligatures: no-common-ligatures" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">var</span><span style="font-variant-ligatures: no-common-ligatures" class=""> description: </span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">String</span><span style="font-variant-ligatures: no-common-ligatures" class=""> {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(196, 34, 117);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">&nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures" class="">switch</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> </span><span style="font-variant-ligatures: no-common-ligatures" class="">self</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">case</span><span style="font-variant-ligatures: no-common-ligatures" class=""> .</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">string</span><span style="font-variant-ligatures: no-common-ligatures" class="">(let str):</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">return</span><span style="font-variant-ligatures: no-common-ligatures" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #c81b13" class="">"\"</span><span style="font-variant-ligatures: no-common-ligatures" class="">\</span><span style="font-variant-ligatures: no-common-ligatures; color: #c81b13" class="">(</span><span style="font-variant-ligatures: no-common-ligatures" class="">str</span><span style="font-variant-ligatures: no-common-ligatures; color: #c81b13" class="">)\""</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">case</span><span style="font-variant-ligatures: no-common-ligatures" class=""> .</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">int</span><span style="font-variant-ligatures: no-common-ligatures" class="">(let i):</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; &nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">return</span><span style="font-variant-ligatures: no-common-ligatures" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">String</span><span style="font-variant-ligatures: no-common-ligatures" class="">(i)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; &nbsp; }</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">&nbsp; }</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; min-height: 21px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">func</span><span style="font-variant-ligatures: no-common-ligatures" class=""> debug(</span><span style="font-variant-ligatures: no-common-ligatures; color: #c42275" class="">_</span><span style="font-variant-ligatures: no-common-ligatures" class=""> path:</span><span style="font-variant-ligatures: no-common-ligatures; color: #539aa4" class="">SubscriptParameter</span><span style="font-variant-ligatures: no-common-ligatures" class="">...) {</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(200, 27, 19);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">&nbsp; </span><span style="font-variant-ligatures: no-common-ligatures; color: #3e1e81" class="">print</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">(</span><span style="font-variant-ligatures: no-common-ligatures" class="">"path is </span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">\</span><span style="font-variant-ligatures: no-common-ligatures" class="">(</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">path</span><span style="font-variant-ligatures: no-common-ligatures" class="">)"</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">)</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">}</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; min-height: 21px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(200, 27, 19);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #294c50" class="">debug</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">(</span><span style="font-variant-ligatures: no-common-ligatures; color: #0435ff" class="">1</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">, </span><span style="font-variant-ligatures: no-common-ligatures" class="">"foo"</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">, </span><span style="font-variant-ligatures: no-common-ligatures; color: #0435ff" class="">2</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">, </span><span style="font-variant-ligatures: no-common-ligatures" class="">"bar”</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">) // path is [1, “foo”, 2, “bar”]</span></div></div></div></blockquote><div><br></div>Can you make this work with variables - not just literals - and still prevent users from extending the set of types and without requiring an enum case constructor to be used by clients?<div><br><div><br><blockquote type="cite"><div><div class=""><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Feb 19, 2017, at 1:14 AM, Adrian Zubarev &lt;<a href="mailto:adrian.zubarev@devandartist.com" class="">adrian.zubarev@devandartist.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><p style="margin: 15px 0px; -webkit-margin-before: 0px;" class="">If you haven’t followed the other thread Matthew previously opened than you have missed the example I showed there.</p><p style="margin: 15px 0px;" class="">Here it is again:</p><pre style="margin: 15px 0px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;" class=""><code class="swift" style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;">public protocol SubscriptParameterType {
      
    // This property was needed to prevent the client from breaking
    // the library by conforming to the protocol, but I'd like to   
    // keep it invisible for the client, or even better prevent the
    // client from conforming to the protocol.
    var parameter: Document.SubscriptParameter { get }
}

extension Document {
      
    public enum SubscriptParameter {
              
        case string(String)
        case integer(Int)
    }
}

extension String : SubscriptParameterType {
      
    public var parameter: Document.SubscriptParameter {
          
        return .string(self)
    }
}

extension Int : SubscriptParameterType {
      
    public var parameter: Document.SubscriptParameter {
          
        return .integer(self)
    }
}

// Somewhere inside the `Document` type
public subscript(firstKey: String, parameters: SubscriptParameterType...) -&gt; Value? { … }
</code></pre><p style="margin: 15px 0px;" class="">The absence of closed protocols forced me to create a special requirement on that protocol to prevent the client from conforming to that protocol and passing instances of other types my API wouldn’t want to deal with. That creates unnecessary copies and I need to unpack the enum payload to find out which type the user passed. Instead I could simply close the protocol, wouldn’t need the requirement to exist and I could simply cast the type to<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">String</code><span class="Apple-converted-space">&nbsp;</span>or<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal;" class="">Int</code><span class="Apple-converted-space">&nbsp;</span>when needed.</p><p style="margin: 15px 0px;" class="">That implementation enables more safe queries of my Document type like</p><p style="margin: 15px 0px;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">document["key1", intIndexInstance, stringKeyInstance, 10, "key"]</code></p><p style="margin: 15px 0px;" class="">rather than<span class="Apple-converted-space">&nbsp;</span></p><p style="margin: 15px 0px;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">document["key1/\(intIndexInstance)/\(stringKeyInstance)/10/key"]</code>.</p><hr style="height: 0.2em; border: 0px; color: rgb(204, 204, 204); background-color: rgb(204, 204, 204); display: inherit;" class=""><p style="margin: 15px 0px;" class="">Here is a list of hidden and semi-hidden protocols from the standard library that could be closed. Formatted version:<span class="Apple-converted-space">&nbsp;</span><a href="https://gist.github.com/DevAndArtist/168c800d784829be536c407311953ab7" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none; -webkit-margin-before: 0px;" class="">https://gist.github.com/DevAndArtist/168c800d784829be536c407311953ab7</a></p><table style="margin: 15px 0px; border-collapse: collapse; font-family: Helvetica, arial, freesans, clean, sans-serif; color: rgb(51, 51, 51); font-size: 15px; line-height: 25px; padding: 0px;" class=""><colgroup style="-webkit-margin-before: 0px;" class=""><col style="-webkit-margin-before: 0px; text-align: left;" class=""><col style="text-align: center;" class=""></colgroup><thead class=""><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px; -webkit-margin-before: 0px;" class=""><th style="font-weight: bold; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">Path</th><th style="font-weight: bold; border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class="">Protocol</th></tr></thead><tbody class=""><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px; -webkit-margin-before: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/AnyHashable.swift:16</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_HasCustomAnyHashableRepresentation</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/BidirectionalCollection.swift:21</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_BidirectionalIndexable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/BridgeObjectiveC.swift:19</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ObjectiveCBridgeable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/Collection.swift:20</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_IndexableBase</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/Collection.swift:176</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_Indexable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:193</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByBuiltinIntegerLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:240</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByBuiltinFloatLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:283</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByBuiltinBooleanLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:316</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByBuiltinUnicodeScalarLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:350</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByBuiltinExtendedGraphemeClusterLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:398</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByBuiltinStringLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:407</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByBuiltinUTF16StringLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:670</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByStringInterpolation</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:709</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByColorLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:720</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByImageLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:730</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ExpressibleByFileReferenceLiteral</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/CompilerProtocols.swift:750</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_DestructorSafeContainer</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/FixedPoint.swift.gyb:53</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_Integer</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/FixedPoint.swift.gyb:70</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_SignedInteger</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/FixedPoint.swift.gyb:108</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_DisallowMixedSignArithmetic</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/Hashable.swift:16</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_Hashable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/Index.swift:16</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_Incrementable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/IntegerArithmetic.swift.gyb:33</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_IntegerArithmetic</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/Mirror.swift:721</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_DefaultCustomPlaygroundQuickLookable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/MutableCollection.swift:20</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_MutableIndexable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/NewtypeWrapper.swift.gyb:16</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_SwiftNewtypeWrapper</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/Pointer.swift:16</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_Pointer</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/RandomAccessCollection.swift:20</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_RandomAccessIndexable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/RangeReplaceableCollection.swift.gyb:27</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_RangeReplaceableIndexable</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ReflectionLegacy.swift:41</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_Mirror</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:27</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ShadowProtocol</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:31</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSFastEnumeration</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:41</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSEnumerator</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:51</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSCopying</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:61</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSArrayCore</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:83</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSDictionaryCore</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:125</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSDictionary</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:137</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSSetCore</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:171</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSSet</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:177</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSNumber</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:187</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSArrayCore</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:188</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSDictionaryCore</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/ShadowProtocols.swift:189</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSSetCore</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/core/StringBridge.swift:194</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_NSStringCore</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/SDK/Foundation/NSError.swift:353</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ObjectiveCBridgeableError</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/SDK/Foundation/NSError.swift:379</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">__BridgedNSError</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/SDK/Foundation/NSError.swift:446</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_BridgedNSError</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248); margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/SDK/Foundation/NSError.swift:456</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_BridgedStoredNSError</code></td></tr><tr style="border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: white; margin: 0px; padding: 0px;" class=""><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; -webkit-margin-before: 0px; text-align: left;" class="">/swift/stdlib/public/SDK/Foundation/NSError.swift:564</td><td style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding: 6px 13px; text-align: center;" class=""><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">_ErrorCodeProtocol</code></td></tr></tbody></table><div style="margin: 15px 0px;" class=""><br class="webkit-block-placeholder"></div></div><div class="bloop_original_html" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><br class=""></div><br class=""><div id="bloop_sign_1487490659060471040" class="bloop_sign"><div style="font-family: helvetica, arial; font-size: 13px;" class="">--&nbsp;<br class="">Adrian Zubarev<br class="">Sent with Airmail</div></div><br class=""><p class="airmail_on" style="margin: 15px 0px;">Am 19. Februar 2017 um 07:59:45, David Waite via swift-evolution (<a href="mailto:swift-evolution@swift.org" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">swift-evolution@swift.org</a>) schrieb:</p><blockquote type="cite" class="clean_bq" style="margin: 15px 0px;"><span style="margin-top: 0px; margin-bottom: 0px;" class=""><div class=""><div class=""></div><div class="">I am unsure if this feature is a good idea. Does someone have a real-world use for this which isn’t just hiding strong implementation coupling behind a protocol?<br class=""><br class="">When I consume a protocol, it is under the assumption that the protocol is documented such that I would be able to work against *any* implementation of the protocol. With a closed protocol, I would have to assume that there are significant side effects, either undocumented or difficult for a third party to duplicate. To my experience, that sounds brittle.<br class=""><br class="">Assuming you aren’t switching on the implementing type of a protocol (which itself can be a sign that your design isn’t properly using polymorphism), one could get this design by creating a struct with the interface desired, and passing invocations through to an internal protocol reference.<br class=""><br class="">-DW<br class=""><br class="">&gt; On Feb 18, 2017, at 1:41 PM, Matthew Johnson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Now that we’re in phase 2 I’d like to officially propose we introduce `open` protocols and require conformances to `public` protocols be inside the declaring module. Let’s use this thread for feedback on the official proposal. After a healthy round of discussion I’ll open a PR to submit it for review.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; # Feature name<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; * Proposal: [SE-NNNN](NNNN-open-public-protocols.md)<br class="">&gt; * Authors: [Matthew Johnson](<a href="https://github.com/anandabits" class="">https://github.com/anandabits</a>)<br class="">&gt; * Review Manager: TBD<br class="">&gt; * Status: **Awaiting review**<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Introduction<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; This proposal introduces `open protocol` and changes the meaning of `public protocol` to match the meaning of `public class` (in this case, conformances are only allowed inside the declaring module).<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; The pitch thread leading up to this proposal was: [consistent public access modifiers](<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170206/031653.html" class="">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170206/031653.html</a>)<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Motivation<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; A general principle the Swift community has adopted for access control is that defaults should reserve maximum flexibility for a library. The ensures that any capabilities beyond mere visibility are not available unless the author of the library has explicitly declared their intent that the capabilities be made available. Finally, when it is possible to switch from one semantic to another without breaking clients (but not vice-versa) we should prefer the more forgiving (i.e. fixable) semantic as the (soft) default.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; `public` is considered a "soft default" in the sense that it is the first access modifier a user will reach for when exposing a declaration outside of the module. In the case of protocols the current meaning of `public` does not meet the principle of preserving maximum flexibility for the author of the library. It allows users of the library to conform to the protocol.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; There are good reasons a library may not wish to allow users to add conformances to a protocol. For example, it may not wish to expose the conforming concrete types. While similar behavior could be accomplished with an enum if cases could be private, that requires an implementation to use switch statements rather than polymorphism.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Even if all the conforming types are also public there are cases where polymorphism is the preferred implementation. For example, if the set of conforming types is not expected to be fixed (despite all being inside the library) the authors may not want to have to maintain switch statements every time they need to add or remove a confroming type which would be necessary if an enum were used instead. Polymorphism allows us to avoid this, giving us the ability to add and remove conforming types within the implementation of the library without the burden of maintaining switch statements.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Aligning the access modifiers for protocols and classes allows us to specify both conformable and non-conformable protocols, provides a soft default that is consistent with the principle of (soft) defaults reserving maximum flexibility for the library, and increases the overall consistency of the language by aligning the semantics of access control for protocols and classes.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; The standard library currently has at least one protocol (`MirrorPath`) that is documented as disallowing client conformances. If this proposal is adopted it is likely that `MirrorPath` would be declared `public protocol` and not `open protocol`.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Jordan Rose has indicated that the Apple frameworks also include a number of protocols documented with the intent that users do not add conformances. Perhaps an importer annotation would allow the compiler to enforce these semantics in Swift code as well.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Proposed solution<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; The proposed solution is to change the meaning of `public protocol` to disallow conformances outside the declaring module and introduce `open protocol` to allow conformances outside the decalring module (equivalent to the current meaning of `public protocol`).<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Detailed design<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; The detailed design is relatively straightforward but there are three important wrinkles to consider.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ### User refinement of public protocols<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Consider the following example:<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ```swift<br class="">&gt; // Library module:<br class="">&gt; public protocol P {}<br class="">&gt; public class C: P {}<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; // User module:<br class="">&gt; protocol User: P {}<br class="">&gt; extension C: User {}<br class="">&gt; ```<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; The user module is allowed to add a refinement to `P` because this does not have any impact on the impelementation of the library or its possible evolution. It simply allows the user to write code that is generic over a subset of the conforming types provided by the library.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ### Public protocols with open conforming classes<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Consider the following example:<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ```swift<br class="">&gt; public protocol P P{}<br class="">&gt; open class C: P {}<br class="">&gt; ```<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Users of this module will be able to add subclasses of `C` that have a conformance to `P`. This is allowed becuase the client of the module did not need to explicitly declare a conformance and the module has explicitly stated its intent to allow subclasses of `C` with the `open` access modifier.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ### Open protocols that refine public protocols<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; Consider the following example:<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ```swift<br class="">&gt; // library module:<br class="">&gt; public protocol P {}<br class="">&gt; open protocol Q: P {}<br class="">&gt; open protocol R: P {}<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; // user module:<br class="">&gt; struct S: P {} // error `P` is not `open`<br class="">&gt; struct T: Q {} // ok<br class="">&gt; struct U: R {} // ok<br class="">&gt; ```<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; The user module is allowed to introudce a conformance to `P`, but only indirectly by also conforming to `Q`. The meaning we have ascribed to the keywords implies that this should be allowed and it offers libraries a very wide design space from which to choose. The library is able to have types that conform directly to `P`, while placing additional requirements on user types if necessary.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Source compatibility<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; This proposal breaks source compatibility, but in a way that allows for a simple mechanical migration. A multi-release stratgegy will be used to roll out this proposal to provide maximum possible source compatibility from one release to the next.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; 1. In Swift 4, introduce the `open` keyword and the `@nonopen` attribute (which can be applied to `public protocol` to give it the new semantics of `public`).<br class="">&gt; 2. In Swift 4 (or 4.1 if necessary) start warning for `public protocol` with no annotation.<br class="">&gt; 3. In the subsequent release `public protocol` without annotation becomes an error.<br class="">&gt; 4. In the subsequent relase `public protocol` without annotation takes on the new semantics.<br class="">&gt; 5. `@nonopen` becomes a warning, and evenutally an erro as soon as we are comfortable making those changes.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Effect on ABI stability<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; I would appreciate it if others can offer input regarding this section. I believe this proposal has ABI consequences, but it's possible that it could be an additivie ABI change where the ABI for conformable protocols remains the same and we add ABI for non-conformable protocols later. If that is possible, the primary impact would be the ABI of any standard library protocols that would prefer to be non-conformable.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Effect on API resilience<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; This proposal would may impact one or more protocols in the standard library, such as `MirrorPath`, which would likely choose to remain `public` rather than adopt `open`.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; ## Alternatives considered<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; The primary alternatives are to either make no change, or to add something like `closed protocol`. The issues motivating the current proposal as a better alternative than either of these options are covered in the motivation section.<br class="">&gt;<span class="Apple-converted-space">&nbsp;</span><br class="">&gt; _______________________________________________<br class="">&gt; swift-evolution mailing list<br class="">&gt; <a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></div></span></blockquote></div><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"></div></div></blockquote></div><br class=""></div></div></div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></div></div></body></html>