<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=""><div class="">I have updated the trades example with a statement before final value - Paul</div><div class="">I have lessened the restrictions on the cases clause (but not renamed it since expressions was longer and too close to terminology expression which may get confusing). I have clarified what cases is in respect to the first example.</div><div class=""><br class=""></div><div class="">I have not tackled motivation yet - my head is not yet ready to tackle that one. (it might not be committed til Sunday evening - sister flying in Saturday/Sunday enroute to another country nearby next week).</div><div class=""><br class=""></div><div class=""><a href="https://github.com/cacruden/swift-evolution/blob/master/proposals/0000-Pattern-Matching-Partial-Function.md" class="">https://github.com/cacruden/swift-evolution/blob/master/proposals/0000-Pattern-Matching-Partial-Function.md</a></div><div class=""><br class=""></div><div class="">I will look around and see if I can see any really good simple use cases to demonstrate partial functions (generally) in the meantime.</div><div class=""><br class=""></div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On 2016-01-15, at 21:15:13, Craig Cruden <<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Can you write a few good use cases with sample code and the major selling points in easy to understand way so that the general community can understand why Partial Functions are a good addition (most not being functional programmers)? How a case class translates into a partial function in a generalized way? If we can do that in an easy to understand and concise manner than we can merge the two proposals together. Having never used partial functions other than in pattern matching / case form I have never had a use case where I have used them — very possibly because of a naivety.<div class=""><br class=""></div><div class=""><br class=""><div class=""><br class=""></div><div class=""><br class=""><div class=""><div class=""><blockquote type="cite" class=""><div class="">On 2016-01-15, at 21:06:35, Thorsten Seitz <<a href="mailto:tseitz42@icloud.com" class="">tseitz42@icloud.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="content-type" content="text/html; charset=utf-8" class=""><div dir="auto" class=""><div class=""></div><div class=""><br class=""></div><div class=""><br class="">Am 15.01.2016 um 02:13 schrieb Craig Cruden <<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>>:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class="">I admit I am not a fan of cases as either but included it as a compromise because of a fairly even devision between those that want a concise multi-ternary solution and those that want a more robust solution.<div class=""><br class=""></div><div class="">I view “cases” to be syntactic sugar for the first form, and my gut thinks it is the first thing to go in the review…. so I made it as second in each of the sections. </div></div></blockquote><div class=""><br class=""></div>Ok.<div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="">I did not include Partial Functions for a few reasons… One I see it as a much smaller use case and wanted to focus on pattern matching in this proposal, with potentially a followup refinement adding the ability to define Partial Functions. I also have no idea how to communicate in my own mind it’s strengths and formulate a sales pitch in my own mind — let alone in writing. I use both pattern matching and cases within closures in Scala extensively but never made use of Partial Functions.</div></div></blockquote><div class=""><br class=""></div>Ok, if we are splitting off partial functions then the proposal should not talk about partial functions :-)</div><div class="">That means that the cases should be complete which is fine.</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="">Additionally the Haskell (functional paradigm language) folks seem to be arguing against the general use of partial functions:</div><div class=""><br class=""></div><div class=""><a href="https://wiki.haskell.org/Partial_functions" class="">https://wiki.haskell.org/Partial_functions</a></div></div></blockquote><div class=""><br class=""></div>That's certainly right but we are talking about making partial functions first class objects which allows to deal with values outside of the domain explicitly by asking first or chaining so that the combination is (hopefully) not partial anymore.</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="">If you can write up a formal proposal for generalized partial functions and it’s sales pitch I could make reference to it in the Pattern Matching proposal and potentially submit them in unison. I just worry that if the proposal is not focused their is a greater chance of Rejection or at best Deferred.</div></div></blockquote><div class=""><br class=""></div>I had thought it might have a better chance to be accepted because it would add something over syntactic sugar :-) But I might be wrong of course.</div><div class=""><br class=""></div><div class="">I can't promise anything, though I would like certainly like to give it a try. Originally I had started to write a proposal pushing the value ? case:... syntax for switch expressions but I think this can be dropped in favor of your proposal together with partial functions.</div><div class=""><br class=""></div><div class="">-Thorsten </div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="">Craig</div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On 2016-01-15, at 5:32:19, Thorsten Seitz <<a href="mailto:tseitz42@icloud.com" class="">tseitz42@icloud.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Craig,<div class=""><br class=""></div><div class="">looks good so far!</div><div class="">I’m not a fan of the concise form, though, and would drop it.</div><div class=""><br class=""></div><div class="">The proposal should define what a partial function is supposed to be., i.e. a function that can check whether an argument is in its domain.</div><div class="">It should be possible to ask them isDefinedAt() like in Scala. And chain them with orElse() and andThen(). That would be really useful!</div><div class=""><br class=""></div><div class=""><b class="">let</b> stdColorCode = {</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span><b class="">case</b> .Red: 100</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span><b class="">case</b> .Green: 200</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span><b class="">case</b> .Blue: 300</div><div class="">}</div><div class=""><br class=""></div><div class="">// type of stdColorCode: <b class="">partial</b> Color -> Int</div><div class="">// or maybe: Color => Int</div><div class=""><br class=""></div><div class=""><b class="">let</b> colorCode = stdColorCode.orElse {</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span><b class="">case</b> .Yellow: 400</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span><b class="">case</b> .Cyan: 500</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span><b class="">case</b> .Magenta: 600</div><div class="">}</div><div class=""><br class=""></div><div class=""><b class="">let</b> x = colorCode(col).orElse(700)</div><div class=""><br class=""></div><div class="">Thinking about it, I have the feeling that it should be possible to force exhaustiveness checks somehow.</div><div class=""><br class=""></div><div class="">Maybe like follows:</div><div class=""><br class=""></div><div class="">// Defining a partial function has to be made explicit with a new keyword <b class="">undefined</b> in the default clause (or other case clauses)</div><div class="">// (I briefly thought about reusing „continue“ but that might collide with the proposal to make „break“, „continue“ and possibly „return“ to</div><div class="">// work properly in closures)</div><div class=""><div class=""><b class="">let</b> stdColorCode = {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Red: 100</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Green: 200</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Blue: 300</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span><b class="">default</b>: <b class="">undefined</b></div><div class="">}</div></div><div class=""><br class=""></div><div class="">// The following is *not* a partial function (and cannot be asked isDefinedAt() or chained).</div><div class="">// But the compiler would complain if the argument type (here inferred) has more cases (just like in a normal switch statement).</div><div class=""><div class=""><b class="">let</b> stdColorCode = {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Red: 100</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Green: 200</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Blue: 300</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Yellow: 400</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Cyan: 500</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><b class="">case</b> .Magenta: 600</div><div class="">}</div></div><div class=""><br class=""></div><div class="">-Thorsten</div><div class=""><br class=""></div><div class=""><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div class="">Am 14.01.2016 um 20:23 schrieb Craig Cruden via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>>:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;">Paul, </div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;"><br class=""></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; float: none; display: inline !important;" class="">I tried to put my understanding on the latest proposal option into a draft on github (instead of my usual BitBucket repo). </span><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;">Take a look at it and see if there is anything useable.</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;"><a href="https://github.com/cacruden/swift-evolution/blob/master/proposals/0000-Pattern-Matching-Partial-Function.md" class="">https://github.com/cacruden/swift-evolution/blob/master/proposals/0000-Pattern-Matching-Partial-Function.md</a></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;">Craig</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;"><br class=""><div class=""><blockquote type="cite" class=""><div class="">On 2016-01-11, at 14:17:09, Craig Cruden <<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Ignore the last comment - tired and mistaken. :p<div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On 2016-01-11, at 14:16:01, Craig Cruden <<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">I just realized “cases” probably is not needed - if it see’s a comma after case but before “:” then it is the concise form. <div class=""><br class=""></div><div class="">If the switch / case can do that , the partial function case should be able to do the same thing.</div><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On 2016-01-11, at 13:23:19, Craig Cruden <<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="">I have thought about it a bit more and I think this would cover all the cases that interest me (in addition to others needs for a little more conciseness on the most simple case). </div><div class=""><br class=""></div><div class="">I also think we need to be clear that the “case” (or cases) and “default” are is really just a partial function which in it’s entirety is really just a complete function for used wherever a complete function (exhaustive) can be passed (e.g. reduce, filter, etc.) - otherwise they might get confused on why we are adding it to “map”. </div><div class=""><br class=""></div><div class="">The optional where clause should also be part of the case clause as part of the proposal. </div><div class=""><br class=""></div><div class="">There would be no need for statement based “fallthrough”.</div><div class=""><br class=""></div><div class="">You mentioned your proposal…. have you drafted a formal proposal draft?</div><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div class=""><blockquote type="cite" class=""><div class="">On 2016-01-10, at 12:41:03, Paul Ossenbruggen via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">I agree that it would be really useful to keep things concise. I am going to suggest again an idea I had in the past, it is also in my proposal, which might work well for this problem. This might address the verbosity of the “case” and at the same time make it obvious we are dealing with a switch expression. So both would be valid: <div class=""><br class=""></div><div class=""><div class=""><div dir="ltr" class=""><div class="" style="word-wrap: break-word;"><div dir="ltr" class=""><div class="" style="word-wrap: break-word;"><div dir="ltr" class=""><div class="" style="font-size: 13px; margin: 0px; line-height: normal; font-family: Arial;"><b class=""><div dir="ltr" class="" style="font-family: Helvetica; font-size: 12px; font-weight: normal;"><div class="" style="word-wrap: break-word;"><div dir="ltr" class=""><div class="" style="word-wrap: break-word;"><div dir="ltr" class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class=""><span class="" style="color: rgb(96, 96, 96); white-space: pre-wrap;">        </span><font color="#006d8f" class="">let</font></b><b class="" style="color: rgb(96, 96, 96);"> num = color.</b><font color="#008cb4" class="">map </font>{</b></div></div></div></div></div></b></div></div></div></div></div></div></div></div></div></blockquote><blockquote type="cite" class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class=""><span class="" style="white-space: pre-wrap;"><font color="#606060" class="">        </font><font color="#006d8f" class="">cases</font><font color="#606060" class=""> </font></span></b><b class=""><font color="#4f7a28" class="">.Red:</font></b><b class="" style="color: rgb(227, 36, 0);"> </b><b class="" style="color: rgb(96, 96, 96);">100,</b><b class="" style="color: rgb(96, 96, 96);"> </b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class=""><span class="" style="white-space: pre-wrap;"><font color="#606060" class="">        <span class="Apple-tab-span" style="white-space: pre;">        </span> </font><font color="#4f7a28" class="">.</font></span></b><b class=""><font color="#4f7a28" class="">Green: </font></b><span class=""> </span><b class="" style="color: rgb(96, 96, 96);">200</b><b class=""><font color="#e32400" class="">,</font></b><b class="" style="color: rgb(96, 96, 96);"> </b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        <span class="Apple-tab-span" style="white-space: pre;">        </span> </span></b><b class=""><font color="#4f7a28" class="">.Blue</font><font color="#e32400" class="">: </font></b><b class="" style="color: rgb(96, 96, 96);">300</b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class=""><span class="" style="white-space: pre-wrap;"><font color="#606060" class="">        </font><font color="#006d8f" class="">default</font></span></b><b class="" style="color: rgb(227, 36, 0);">: </b><b class="" style="color: rgb(96, 96, 96);">-1</b><b class="" style="color: rgb(227, 36, 0);"> </b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><span class="" style="color: rgb(227, 36, 0); white-space: pre-wrap;">        </span>}</b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class=""><span class="" style="color: rgb(96, 96, 96); white-space: pre-wrap;">        </span><font color="#006d8f" class="">let</font></b><b class="" style="color: rgb(96, 96, 96);"> num = color.</b><b class=""><font color="#008cb4" class="">map </font>{</b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class=""><span class="" style="white-space: pre-wrap;"><font color="#606060" class="">        </font><font color="#006d8f" class="">case</font><font color="#606060" class=""> </font></span></b><b class=""><font color="#4f7a28" class="">.Red:</font></b><b class="" style="color: rgb(227, 36, 0);"> </b><b class="" style="color: rgb(96, 96, 96);">100</b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class=""><span class="" style="white-space: pre-wrap;"><font color="#606060" class="">        </font><font class="" color="#006d8f">case </font><font color="#606060" class=""> </font><font color="#4f7a28" class="">.</font></span></b><b class=""><font color="#4f7a28" class="">Green: </font></b><span class="" style="font-family: Helvetica;"> </span><b class="" style="color: rgb(96, 96, 96);">200</b><b class="" style="color: rgb(96, 96, 96);"> </b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class=""><span class="" style="white-space: pre-wrap;"><font color="#606060" class="">        </font><font color="#006d8f" class="">case</font><font color="#606060" class=""> </font></span></b><b class=""><font color="#4f7a28" class="">.Blue</font><font color="#e32400" class="">: </font></b><b class="" style="color: rgb(96, 96, 96);">300</b></b><br class=""><b class="" style="font-family: Arial; font-size: 13px;"><b class="" style="color: rgb(96, 96, 96);"><span class="" style="white-space: pre-wrap;">        </span></b><b class=""><span class="" style="white-space: pre-wrap;"><font color="#606060" class="">        </font><font color="#006d8f" class="">default</font></span></b><b class="" style="color: rgb(227, 36, 0);">: </b><b class="" style="color: rgb(96, 96, 96);">-1</b><b class="" style="color: rgb(227, 36, 0);"> </b></b><br class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class=""><div class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class=""><div class=""><div dir="ltr" class=""><div class="" style="word-wrap: break-word;"><div dir="ltr" class=""><div class="" style="word-wrap: break-word;"><div dir="ltr" class=""><div class="" style="font-size: 13px; margin: 0px; line-height: normal; font-family: Arial;"><b class=""><span class="" style="color: rgb(227, 36, 0); white-space: pre-wrap;">        </span>}</b></div><div class=""><b class=""><br class=""></b></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=1MXK54sosN3xru3iYcLt0oBZ2w20i49gyogXctgrspfaDNrb6v-2FQSoGuGh4xjx2M1VLzhvKFmvFBNKS228NkpniExzVjzphDHKrHnSn-2F22p-2FW-2BpWCX4bCmdHq4Peogpqn1Ijqn3IZ-2FZhlfw7732DzkvsKcYFZv5NhFB-2BztZrT-2FnqS0lq4vx5caUE-2B3mYjzsDiA2zC5aYFPtvAaj9H22xzZgvxjWw8tuDBqXl22a3R7U-3D" alt="" width="1" height="1" border="0" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; float: none; display: inline !important;" class=""><span class="Apple-converted-space"> </span></span><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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=""><a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; font-size: 12px; font-style: normal; font-variant: 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=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div></div></blockquote></div></div></div></blockquote></div><br class=""></div></div></div></div></div></blockquote></div><br class=""></body></html>