<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>There are a few more things I forget to mention in my previous post.</p>

<p>Consider these examples:</p>

<pre><code class="swift">public protocol A {
    protocol B {}
}

// means A.B is public

extension A {
    protocol C {}
}

// means `A.C` is internal
</code></pre>

<p>Without extensions this wouldn’t be possible. This flexibility must exist, because we don’t allow access modifier inside protocols. </p>

<p>Plus it’s interesting to see what we could build with constrained extensions.</p>

<pre><code class="swift">protocol Proto {}

extension Proto where Self : SomethingElse {
     
      class Inner {}
}
</code></pre>

<p>And the last but not least. I already started a topic about the inconsistency of <code>public/open</code> access modifier to protocols. I my world I think this should be possible:</p>

<pre><code class="swift">public class Something {
     
    open protocol Delegate { … }
     
    public protocol Interface { … }
}
</code></pre>

<ul>
<li><p>In a different module it’s possible to use the <code>Something</code> class but you cannot subclass it. </p></li>
<li><p>We should be able to conform in a different module to <code>Something.Delegate</code>.</p></li>
<li><p>We cannot conform to <code>Something.Interface</code>, but can use it as an interface for a specific purpose. </p></li>
</ul>

<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><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><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_1477125231546590976" 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 22. Oktober 2016 um 10:14:17, Adrian Zubarev (<a href="mailto:adrian.zubarev@devandartist.com">adrian.zubarev@devandartist.com</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div></div><div>




<title></title>



<div class="bloop_markdown">
<p>First of all, thank you for writing the formal proposal.</p>
<p>To begin with, I’d like to remember you that type nesting is not
only done through nesting types directly in concrete types. A
commonly used pattern to reduce clustering is nesting inside
extensions:</p>
<pre><code class="swift">extension TypeName {
      
    class InnerTypeName { … }
}
</code></pre>
<p>Next up:</p>
<pre><code class="swift">protocol Outer {
     protocol Inner {
         associatedtype Huh // why would you do this?
     }
}
</code></pre>
<p>I disagree with this: why would you want to restrict this?</p>
<p>The Outer protocol might be simple by the inner protocol is not.
If you’d move the <code>associatedtype Huh</code> into
<code>Outer</code> protocol you’d automatically break the intended
simplicity of the <code>Outer</code> protocol.</p>
<p>The following example is kept simple just to show that the outer
protocol is in our case intended to be simple where the inner is
not.</p>
<pre><code class="swift">protocol Building {
      
    protocol Room {

        associatedtype Person
    }

    var numberOfRooms: Int { get }
}

struct Pupil {}
struct Student {}

struct University : Building {
      
    let numberOfRooms: Int = 1000

    struct Room : Building.Room {

        typealias Person = Student
    }
}

struct School : Building {
      
    let numberOfRooms: Int = 100

    struct Room : Building.Room {

        typealias Person = Pupil
    }
}

let buildings: [Building] = [University(), School()] // fine because `Building` is simple
</code></pre>
<p>The inner types in this example are different from each other,
but this wasn’t the main point anyways.</p>
<p>Unless this restriction would have other technical reasons than
“It is hard to think of a valid reason why a nested protocol might
want to be more generic than its parent”, I’m against it.</p>
<p>At the very beginning I said that nesting is also done through
extensions. Let’s rewrite the above example from your draft that
way and see what we good.</p>
<pre><code class="swift">protocol Outer {} // Simple

extension Outer {
      
    // Complex
    protocol Inner {
     associatedtype Huh // why would you do this?
  }
}

// new name spacing `Outer.Inner`
</code></pre>
<p>From this perspective it’s much clearer now that the
<code>Outer</code> protocol type in out case is intended to be
simple.</p>
<hr>
<p>About <code>associatedtype</code>s with extensions:</p>
<p>In Swift 3.0 this code compiles:</p>
<pre><code class="swift">public class Class {}

public protocol Outer {
    associatedtype AAA : Class
}

extension Outer {
    public typealias AAA = Int
}
</code></pre>
<p>This does mean that the associatedtype is lost in extensions and
can be reused as an inner type for nesting. This also means that
the inner type wouldn’t be able to capture the associatedtype from
the outer type and might be simple.</p>
<pre><code class="swift">protocol Outer {

   associatedtype AAA
}

extension Outer {
    protocol Inner {} // Simple because nesting from within extensions seems to ignore the associatedtype from the `Outer` type
}
</code></pre>
<p>You can compare this to todays workarounds where you only want
to create a nice name space but want to keep the inner type
simple.</p>
<pre><code class="swift">// Implementation artifact
protocol _Inner {} // simple

// Complex
protocol Outer {
    associatedtype Anything
}

extension Outer {
    typealias Inner = _Inner
}

// Free to use `Outer.Inner`
</code></pre></div>
<div class="bloop_original_html">

<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_1477121523501244928" 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 22. Oktober 2016 um 04:18:25, Karl
(<a href="mailto:razielim@gmail.com">razielim@gmail.com</a>)
schrieb:</p>
<blockquote type="cite" class="clean_bq">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div><span><br class=""></span>
<div>
<blockquote type="cite" class="">
<div class=""><span>On 22 Oct 2016, at 04:12, Karl &lt;<a href="mailto:raziel.im+swift-evo@gmail.com" class="">raziel.im+swift-evo@gmail.com</a>&gt; wrote:</span></div>
<span><br class="Apple-interchange-newline"></span>
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><span><br class=""></span>
<div class="">
<blockquote type="cite" class="">
<div class=""><span>On 22 Oct 2016, at 04:07, Karl &lt;<a href="mailto:raziel.im+swift-evo@gmail.com" class="">raziel.im+swift-evo@gmail.com</a>&gt; wrote:</span></div>
<span><br class="Apple-interchange-newline"></span>
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><span><br class=""></span>
<div class="">
<blockquote type="cite" class="">
<div class=""><span>On 22 Oct 2016, at 04:02, Braeden Profile
&lt;<a href="mailto:jhaezhyr12@gmail.com" class="">jhaezhyr12@gmail.com</a>&gt; wrote:</span></div>
<span><br class="Apple-interchange-newline"></span>
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class=""><span>But what would that mean? &nbsp;If I reference
`ProtocolName.InnerType`, that doesn’t always have meaning.
&nbsp;In fact, if you have two different extensions where
AssociatedType equals something else, there’s a type ambiguity from
other code. &nbsp;I suspect it would only work if that InnerType
was mandated to be `private`.</span></div>
</div>
</div>
</blockquote>
<div class=""><span><br class=""></span></div>
<div class=""><span>You would need a reference to a (ProtocolName
where AssociatedType == Int), which you can get either from a
`self` inside the extension or from a generic
parameter:</span></div>
<div class=""><span><br class=""></span></div>
<div class=""><span>struct MyValue&lt;T&gt; : ProtocolName {
typealias AssociatedType = T }</span></div>
<div class=""><span><br class=""></span></div>
<div class=""><span>let _ =
MyValue&lt;Int&gt;().InnerType()</span></div>
</div>
</div>
</div>
</blockquote>
<div class=""><span><br class=""></span></div>
<span>No, wait - sorry, that’s wrong. I got confused for a second.
You’re right; it would have to be a private type.</span></div>
</div>
</div>
</blockquote>
<div><span><br class=""></span></div>
<div><span>Actually I think I take that back (I was just writing,
lots of snippets floating around my head) - ProtocolName is a
generic protocol, so types inside of it would become types on the
concrete conformers. That’s consistent with the Editor.Delegate
example in the draft proposal I linked to.</span></div>
<div><span><br class=""></span></div>
<div><span>So MyValue&lt;Int&gt;.InnerType would exist 👍
ProtocolName.InnerType isn’t really very meaningful
otherwise.</span></div>
<div><span><br class=""></span></div>
<div><span>- Karl</span></div>
<div><span><br class=""></span></div>
<blockquote type="cite" class="">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class=""><span><br class=""></span>
<blockquote type="cite" class="">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class=""><span><br class=""></span>
<blockquote type="cite" class="">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><span><br class=""></span>
<div class="">
<blockquote type="cite" class="">
<div class=""><span>On Oct 17, 2016, at 12:44 PM, Adrian Zubarev
via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</span></div>
<span><br class="Apple-interchange-newline"></span>
<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; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);">
<p style="margin: 15px 0px; -webkit-margin-before: 0px;" class="">
<span>That option should not be disallowed. Here is a simple
example you might want to build at some point:</span></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=""><span><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;">protocol ProtocolName {
       
    associatedtype AssociatedType
}

extension ProtocolName where AssociatedType == Int {
    
    struct InnerType {}
}
</code></span></pre>
<div style="margin: 15px 0px;" class=""><span><br class="webkit-block-placeholder"></span></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; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; 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=""><span><br class=""></span></div>
<span><br class=""></span>
<div id="bloop_sign_1476729773673214976" class="bloop_sign">
<div style="font-family: helvetica, arial; font-size: 13px;" class=""><span>--&nbsp;<br class="">
Adrian Zubarev<br class="">
Sent with Airmail</span></div>
</div>
<span><br class=""></span>
<p class="airmail_on" style="margin: 15px 0px;"><span>Am 17.
Oktober 2016 um 20:30:58, Karl 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:</span></p>
<blockquote type="cite" class="clean_bq" style="margin: 15px 0px;">
<div class="">
<blockquote class="clean_bq" style="margin: 15px 0px; font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">
<div class="" style="margin-top: 0px; margin-bottom: 0px;">
<div dir="ltr" class="">
<div class=""><span><span style="margin-top: 0px; margin-bottom: 0px;" class="">Is your vision that
each conforming type would have to provide its own nested type as
specified by the protocol?</span></span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">Or could the protocol itself define a nested type and
anything could use it?</span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">protocol FloatingPoint: … {</span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; enum RoundingRule {</span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; &nbsp; &nbsp; // Do I put an implementation
here?</span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; }</span></div>
<div class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">}<br class=""></span></div>
</div>
</div>
</blockquote>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">No, types which are defined inside the protocol are implemented
there. Providing your own types to satisfy a conformance is what
associated types are for.</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">If you wanted something like that, you could do it with a nested
protocol + associated type:</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">protocol FloatingPoint {</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; protocol _RoundingRule { func round(_ : Super)
-&gt; Super }</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; associatedType RoundingRule :
_RoundingRule</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">}</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">struct Float : FloatingPoint {</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; enum RoundingRule : _RoundingRule {</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; &nbsp; &nbsp; func round(_ val: Float) -&gt; Float
{</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* switch self,
perform rounding… */&nbsp;</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">&nbsp; &nbsp; }</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">}</span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""></span></div>
<div style="font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="margin-top: 0px; margin-bottom: 0px;" class="">That brings up an interesting point, though - we would need a
way to refer to the outer protocol (I used “Super”
here).</span></div>
<span style="margin-top: 0px; margin-bottom: 0px;" class=""><br class="Apple-interchange-newline"></span></div>
</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; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);">
<div style="margin: 15px 0px; -webkit-margin-before: 0px;" class=""><br class="webkit-block-placeholder"></div>
</div>
<span style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254); float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);" class="">
<span style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254); float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);" class="">
<a href="mailto:swift-evolution@swift.org" style="color: rgb(65, 131, 196); background-color: rgb(254, 254, 254); text-decoration: none; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">swift-evolution@swift.org</a><br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);" class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="color: rgb(65, 131, 196); background-color: rgb(254, 254, 254); text-decoration: none; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);" class=""></div>
</blockquote>
</div>
<br class=""></div>
</div>
</blockquote>
</div>
<br class=""></div>
</div>
</blockquote>
</div>
<br class=""></div>
</div>
</blockquote>
</div>
<br class=""></div>
</div>
</blockquote>
</div>
<div class="bloop_markdown"></div>


</div></div></span></blockquote></div><div class="bloop_markdown"><p></p></div></body></html>