<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Nov 16, 2017, at 3:07 PM, Howard Lovatt via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Where I am proposing a change is that if a closure with generic arguments is encountered it is transformed into the equivalent struct and the struct is typed as it currently is (or if there is a better implementation something equivalent to this), therefore zero change to the type system.</div></div></blockquote><div><br class=""></div>Since we already have local functions that can capture values and be generic, there’s no need to implement a new mechanism for name mangling or handling of captures.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">The changes proposed are a transformation into a struct and name mangling, e.g.:</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="">&nbsp; &nbsp; let increment: &lt;T&gt;(T) throws -&gt; T where T: Numeric = { $0 + 1 }</div></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="">&nbsp; &nbsp; let increment = { &lt;T&gt;(n: T) throws -&gt; T where T: Numeric in n + 1 }</div></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="">&nbsp; &nbsp; let increment: &lt;T&gt;(T) throws -&gt; T where T: Numeric = { &lt;T&gt;(n: T) throws -&gt; T where T: Numeric in n + 1 }</div></div></div></blockquote></div><br class=""><div class="">It sounds like what you’re proposing is essentially a new surface syntax for local functions — since a generic closure would not be a first class value, it could not appear anywhere except for the right hand side of a let binding, right?</div><div class=""><br class=""></div><div class="">Slava</div></body></html>