<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 21, 2017, at 9:44 PM, Xiaodi Wu <<a href="mailto:xiaodi.wu@gmail.com" class="">xiaodi.wu@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">On Tue, Feb 21, 2017 at 8:32 PM, Robert Widmann <span dir="ltr" class=""><<a href="mailto:devteam.codafi@gmail.com" target="_blank" class="">devteam.codafi@gmail.com</a>></span> wrote:<br class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">There’s an important distinction between the ability to wall off, and this particular instance of doing so. By definition, a module allows for the encapsulation and export of a subset of an API, the same way access modifiers allow types to expose an interface. If the sub-parts of that API must interact, they must by definition share the same concerns and belong together under the same submodule. If their implementations require separation then further subdivisions can be made with further submodules. This is the design practice encouraged, and put to good use, by every other language with modules since the heyday of Modula, and breaking that contract by creating unnecessary parent divisions to introduce headaches for yourself is just another case of anti-modular use of a modular system. There’s nothing we can do to stop you from asking for this, but that also doesn’t excuse the poor design choice here - especially when it can be rectified by reshuffling your own dependency graph.</div></div></blockquote><div class=""><br class=""></div><div class="">Indeed, I won't disagree with you wrt _modules_. I notice you titled this thread "submodules" but propose a syntax that uses the word `module`. Left unsaid, I'd imagine, is that you regard a submodule as a module-within-a-module.</div><div class=""><br class=""></div><div class="">This is *not*, as I understand it, what most people on this list are asking for wrt _submodules_. Instead, they are asking for a unit of code greater than a file but less than a module. To parallel that new facility, they want an access level greater than fileprivate but less than internal. This draft proposal (in its failure to acknowledge this frequent ask) explicitly but _silently_ rejects those motivations.<br class=""></div></div></div></div></div></blockquote><div><br class=""></div><div>So they want to be able to aggregate interfaces and define their exportability, while also maintaining the ability to scope a declaration to a particular grouping. This is, quite literally, the semantics we have defined - with modules enabling aggregation and `internal` stretching to become this “new” access control kind.</div><div><br class=""></div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class="h5"><div class=""><blockquote type="cite" class=""><div class="">On Feb 21, 2017, at 9:19 PM, Xiaodi Wu <<a href="mailto:xiaodi.wu@gmail.com" target="_blank" class="">xiaodi.wu@gmail.com</a>> wrote:</div><br class="m_-5707430555427360491Apple-interchange-newline"><div class=""><div dir="ltr" class="">On Tue, Feb 21, 2017 at 8:15 PM, Robert Widmann via swift-evolution <span dir="ltr" class=""><<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>></span> wrote:<br class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><br class=""><div class=""><div class=""><div class="m_-5707430555427360491h5"><blockquote type="cite" class=""><div class="">On Feb 21, 2017, at 7:46 AM, Brent Royal-Gordon via swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>> wrote:</div><br class="m_-5707430555427360491m_-5209089359769303238Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">On Feb 21, 2017, at 1:28 AM, Daniel Duan via swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>> wrote:<br class=""><br class="">It has been my hope that a lightweight module system will remove the need for `private` *and* `fileprivate`.<br class=""></blockquote><br class="">I really doubt it will. `private`/`fileprivate` works because you can also access `internal` at the same time.<br class=""><br class="">What I mean by that is, think about code like this:<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>// Foo.swift<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public class Foo {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public init() { … }<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>func doBar() -> Quux {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>return helper(in: randomRange())<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>private func helper(in range: Range<Int>) -> Quux {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>…<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>// Bar.swift<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public class Bar {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public static let shared = Bar()<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>func baz(with foo: Foo) {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>let quux = foo.doBar()<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>process(quux)<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>private func process(_ quux: Quux) {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>…<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><br class="">These classes have `public` APIs that are externally visible, `internal` APIs for communicating with each other, and `private` APIs for implementation details. Now try to reproduce the same design with submodules and `public`/`internal` only:<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public import MyMod.Foo<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public import MyMod.Bar<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>module Foo {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public class Foo {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public init() { … }<br class=""><br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>??? func doBar() -> Quux {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>return helper(in: randomRange())<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>func helper(in range: Range<Int>) -> Quux {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>…<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>// Bar.swift<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>module Bar {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public class Bar {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public static let shared = Bar()<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>??? func baz(with foo: Foo) {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>let quux = foo.doBar()<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>process(quux)<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>func process(_ quux: Quux) {<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>…<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><br class="">The `doBar()` and `baz()` methods have to be either exposed to third parties or kept away from yourself. That's just not viable.<br class=""><br class=""></div></div></blockquote><div class=""><br class=""></div></div></div><div class="">If they must communicate, they can be a part of the same (sub)module. This makes filling in these annotations trivial. Nobody actually uses modules to wall off their own APIs from themselves like this, they use submodules to encapsulate the internal parts and surface public APIs in the parent.</div></div></div></blockquote><div class=""><br class=""></div><div class="">I think you'll find a ton of people on this list who would want to use submodules precisely to wall off their own APIs from themselves. Witness the hundreds of messages about new syntax to do just that.</div><div class=""> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>module Bar {<span class=""><br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public class Foo {<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public init() { … }<br class=""><blockquote type="cite" class=""></blockquote><font color="#5856d6" class=""><br class=""></font><blockquote type="cite" class=""></blockquote><font color="#5856d6" class=""><br class=""></font><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span></span>internal func doBar() -> Quux {<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>return helper(in: randomRange())<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><blockquote type="cite" class=""></blockquote><font color="#5856d6" class=""><br class=""></font><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>internal func helper(in range: Range<Int>) -> Quux {<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>…<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><blockquote type="cite" class=""></blockquote><font color="#5856d6" class=""><br class=""></font><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>// Bar.swift<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>extension Bar {<span class=""><br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public class Bar {<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>public static let shared = Bar()<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span></span>internal func baz(with foo: Foo) {<span class=""><br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>let quux = foo.doBar()<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>process(quux)<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span></span>internal func process(_ quux: Quux) {<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>…<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><blockquote type="cite" class=""></blockquote><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}<br class=""><span class="m_-5707430555427360491m_-5209089359769303238Apple-tab-span" style="white-space:pre-wrap">        </span>}</div><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="">-- <br class="">Brent Royal-Gordon<br class="">Architechies<br class=""><br class="">______________________________<wbr class="">_________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-evolution</a><br class=""></div></div></blockquote></span></div><br class=""></div><br class="">______________________________<wbr class="">_________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-evolution</a><br class="">
<br class=""></blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></body></html>