<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 was thinking of a C++ design using variadic templates. I'm pretty sure you (as in "someone else") could do it. I don't have anything to show at the moment because I'd probably pull my hair for hours given my know-how level. However, I think that each individual step outlined would be feasible and I don't think that I'm missing any.</div><div class=""><br class=""></div><div class="">You have unit integral constants (Meters = 1, Seconds = 2, Kilograms = 3, etc), a UnitProduct integer sequence (UnitProduct&lt;Meters, Meters, Seconds&gt; being m^2 * s), and a UnitQuotient template that has two UnitProduct template arguments (UnitQuotient&lt;UnitProduct&lt;Meter&gt;, UnitProduct&lt;Second, Second&gt;&gt; being m/s^2, or m * s^-2). Finally, you have a Quantity type that has a numeric type for the quantity and a UnitQuotient for the unit.</div><div class=""><br class=""></div><div class="">The Quantity type has operator overloads for additions and subtractions to the same type. It also has multiplication and division operators for numeric types and any Quantity.</div><div class=""><br class=""></div><div class="">When you multiply two quantities, you merge the UnitProduct integer sequences of the two UnitQuotients. You order them (to give units a canonical order) and you "cancel out" (omit) template arguments that are in both the denominator and numerator. When you divide them, you just merge one UnitQuotient's denominator with the other's numerator and vice-versa.</div><div class=""><br class=""></div><div class="">Complex units can be typedef'd. For intermediate results, type inference would be enough.</div><div class=""><br class=""></div><div class="">Given that it relies on variadic templates and non-type template arguments, this wouldn't be feasible in Swift at the moment.</div><div class="">
<br class="Apple-interchange-newline"><span style="color: rgb(0, 0, 0); font-family: 'Lucida Grande'; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;" class="">Félix</span>
</div>

<br class=""><div><blockquote type="cite" class=""><div class="">Le 7 janv. 2016 à 13:46:09, Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: LucidaGrande; 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="">Really great to hear that you are planning for Swift to be able to do these kinds of things!</span><div class="" style="font-family: LucidaGrande; 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: LucidaGrande; 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;">I tried to see how far I could get (working from memory of a Haskell library; Boost.Units seems quite similar at first glance), but failed of course because of the missing parameterized recursive typealiases:</div><div class="" style="font-family: LucidaGrande; 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: LucidaGrande; 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;"><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">import</span><span class="Apple-converted-space">&nbsp;</span>Foundation</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(133, 153, 1);">public<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span>protocol<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>Peano {}</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(88, 110, 117);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(133, 153, 1);">struct</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>Zero :<span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(181, 137, 1);">Peano</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>{}</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">struct</span><span class="Apple-converted-space">&nbsp;</span>Succ&lt;P : Peano&gt; :<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Peano</span><span class="Apple-converted-space">&nbsp;</span>{}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">struct</span><span class="Apple-converted-space">&nbsp;</span>Pred&lt;S : Peano&gt; :<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Peano</span><span class="Apple-converted-space">&nbsp;</span>{}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(133, 153, 1);">public<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span>typealias<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>One =<span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(181, 137, 1);">Succ</span><span class="" style="color: rgb(131, 148, 150);">&lt;</span><span class="" style="color: rgb(181, 137, 1);">Zero</span><span class="" style="color: rgb(131, 148, 150);">&gt;</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(133, 153, 1);">public<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span>typealias<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>Two =<span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(181, 137, 1);">Succ</span><span class="" style="color: rgb(131, 148, 150);">&lt;</span><span class="" style="color: rgb(181, 137, 1);">One</span><span class="" style="color: rgb(131, 148, 150);">&gt;</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="Apple-converted-space">&nbsp;</span>MinusOne =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Pred</span>&lt;<span class="" style="color: rgb(181, 137, 1);">Zero</span>&gt;</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="Apple-converted-space">&nbsp;</span>MinusTwo =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Pred</span>&lt;<span class="" style="color: rgb(181, 137, 1);">One</span>&gt;</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><div class="">// Quantity with SI Units</div><div class=""><br class=""></div></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(88, 110, 117);">// TODO: extend by more type parameters for the remaining SI units</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">struct</span><span class="Apple-converted-space">&nbsp;</span>Quantity&lt;Length: Peano, Time: Peano, Mass: Peano&gt; :<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Equatable</span>,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Comparable</span><span class="Apple-converted-space">&nbsp;</span>{</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;" class="">&nbsp;&nbsp; &nbsp;<br class="webkit-block-placeholder"></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">let</span><span class="Apple-converted-space">&nbsp;</span>value:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Double</span></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;" class="">&nbsp;&nbsp; &nbsp;<br class="webkit-block-placeholder"></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">init</span>(<span class="" style="color: rgb(133, 153, 1);">_</span><span class="Apple-converted-space">&nbsp;</span>value:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Double</span>) {</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">self</span>.<span class="" style="color: rgb(211, 54, 130);">value</span><span class="Apple-converted-space">&nbsp;</span>= value</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">func</span><span class="Apple-converted-space">&nbsp;</span>==&lt;L,T,M&gt;(lhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;, rhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;) -&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Bool</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">return</span><span class="Apple-converted-space">&nbsp;</span>lhs.<span class="" style="color: rgb(211, 54, 130);">value</span><span class="Apple-converted-space">&nbsp;</span>== rhs.<span class="" style="color: rgb(211, 54, 130);">value</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">func</span><span class="Apple-converted-space">&nbsp;</span>&lt;&lt;L,T,M&gt;(lhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;, rhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;) -&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Bool</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">return</span><span class="Apple-converted-space">&nbsp;</span>lhs.<span class="" style="color: rgb(211, 54, 130);">value</span><span class="Apple-converted-space">&nbsp;</span>&lt; rhs.<span class="" style="color: rgb(211, 54, 130);">value</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">public</span>&nbsp;<span class="" style="color: rgb(133, 153, 1);">func</span>&nbsp;+&lt;L,T,M&gt;(lhs:&nbsp;<span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;, rhs:&nbsp;<span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;) -&gt;&nbsp;<span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;&nbsp;{</div><div class="" style="margin: 0px; line-height: normal;">&nbsp; &nbsp;&nbsp;<span class="" style="color: rgb(133, 153, 1);">return</span>&nbsp;<span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;(lhs.<span class="" style="color: rgb(211, 54, 130);">value</span>&nbsp;+&nbsp;rhs.<span class="" style="color: rgb(211, 54, 130);">value)</span></div><div class="" style="margin: 0px; line-height: normal;">}</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; line-height: normal; color: rgb(88, 110, 117);">// Missing language feature: parameterized recursive typealias</div><div class="" style="margin: 0px; line-height: normal; color: rgb(88, 110, 117);">// i.e. the following typealiases are currently not possible</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Add&lt;Zero, P: Peano&gt; = P</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Add&lt;P: Peano, Zero&gt; = P</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Add&lt;Succ&lt;P1&gt;, Succ&lt;P2&gt;&gt; = Add&lt;Succ&lt;Succ&lt;P1&gt;&gt;,P2&gt;</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Add&lt;Succ&lt;P1&gt;, Pred&lt;P2&gt;&gt; = Add&lt;P1,P2&gt;</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Add&lt;Pred&lt;P1&gt;, Succ&lt;P2&gt;&gt; = Add&lt;P1,P2&gt;</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Add&lt;Pred&lt;P1&gt;, Pred&lt;P2&gt;&gt; = Add&lt;P1,Pred&lt;Pred&lt;P2&gt;&gt;&gt;</div><div class="" style="margin: 0px; line-height: normal; min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Sub&lt;Zero, P: Peano&gt; = P</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Sub&lt;P: Peano, Zero&gt; = P</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Sub&lt;Succ&lt;P1&gt;, Succ&lt;P2&gt;&gt; = Sub&lt;P1,P2&gt;</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Sub&lt;Succ&lt;P1&gt;, Pred&lt;P2&gt;&gt; = Sub&lt;P1,Pred&lt;Pred&lt;P2&gt;&gt;</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Sub&lt;Pred&lt;P1&gt;, Succ&lt;P2&gt;&gt; = Sub&lt;Pred&lt;Pred&lt;P1&gt;&gt;,P2&gt;</div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(133, 153, 1);">typealias</span>&nbsp;Sub&lt;Pred&lt;P1&gt;, Pred&lt;P2&gt;&gt; = Sub&lt;P1,P2&gt;</div></div><div class=""><br class=""></div></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(133, 153, 1);">public<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span>func<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>*</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; &lt;L1,T1,M1,L2,T2,M2,L,T,M<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">where</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">L</span><span class="Apple-converted-space">&nbsp;</span>==<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Add</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L1</span>,<span class="" style="color: rgb(181, 137, 1);">L2</span>&gt;,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">T</span><span class="Apple-converted-space">&nbsp;</span>==<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Add</span>&lt;<span class="" style="color: rgb(181, 137, 1);">T1</span>,<span class="" style="color: rgb(181, 137, 1);">T2</span>&gt;,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">M</span><span class="Apple-converted-space">&nbsp;</span>==<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Add</span>&lt;<span class="" style="color: rgb(181, 137, 1);">M1</span>,<span class="" style="color: rgb(181, 137, 1);">M2</span>&gt;&gt;</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(181, 137, 1);"><span class="" style="color: rgb(131, 148, 150);">&nbsp; &nbsp; (lhs:<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>L1<span class="" style="color: rgb(131, 148, 150);">,</span>T1<span class="" style="color: rgb(131, 148, 150);">,</span>M1<span class="" style="color: rgb(131, 148, 150);">&gt;, rhs:<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>L2<span class="" style="color: rgb(131, 148, 150);">,</span>T2<span class="" style="color: rgb(131, 148, 150);">,</span>M2<span class="" style="color: rgb(131, 148, 150);">&gt;) -&gt;<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>L<span class="" style="color: rgb(131, 148, 150);">,</span>T<span class="" style="color: rgb(131, 148, 150);">,</span>M<span class="" style="color: rgb(131, 148, 150);">&gt;</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">{</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;(lhs.<span class="" style="color: rgb(211, 54, 130);">value</span><span class="Apple-converted-space">&nbsp;</span>* rhs.<span class="" style="color: rgb(211, 54, 130);">value</span>)</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(133, 153, 1);">public<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span>func<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>/</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; &lt;L1,T1,M1,L2,T2,M2,L,T,M<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">where</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">L</span><span class="Apple-converted-space">&nbsp;</span>==<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Sub</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L1</span>,<span class="" style="color: rgb(181, 137, 1);">L2</span>&gt;,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">T</span><span class="Apple-converted-space">&nbsp;</span>==<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Sub</span>&lt;<span class="" style="color: rgb(181, 137, 1);">T1</span>,<span class="" style="color: rgb(181, 137, 1);">T2</span>&gt;,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">M</span><span class="Apple-converted-space">&nbsp;</span>==<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Sub</span>&lt;<span class="" style="color: rgb(181, 137, 1);">M1</span>,<span class="" style="color: rgb(181, 137, 1);">M2</span>&gt;&gt;</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(181, 137, 1);"><span class="" style="color: rgb(131, 148, 150);">&nbsp; &nbsp; (lhs:<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>L1<span class="" style="color: rgb(131, 148, 150);">,</span>T1<span class="" style="color: rgb(131, 148, 150);">,</span>M1<span class="" style="color: rgb(131, 148, 150);">&gt;, rhs:<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>L2<span class="" style="color: rgb(131, 148, 150);">,</span>T2<span class="" style="color: rgb(131, 148, 150);">,</span>M2<span class="" style="color: rgb(131, 148, 150);">&gt;) -&gt;<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>L<span class="" style="color: rgb(131, 148, 150);">,</span>T<span class="" style="color: rgb(131, 148, 150);">,</span>M<span class="" style="color: rgb(131, 148, 150);">&gt;</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">{</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">L</span>,<span class="" style="color: rgb(181, 137, 1);">T</span>,<span class="" style="color: rgb(181, 137, 1);">M</span>&gt;(lhs.<span class="" style="color: rgb(211, 54, 130);">value</span><span class="Apple-converted-space">&nbsp;</span>/ rhs.<span class="" style="color: rgb(211, 54, 130);">value</span>)</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(88, 110, 117);">// Defining some nice typealiases with which to work</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(181, 137, 1);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>Scalar &nbsp; =<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>Zero<span class="" style="color: rgb(131, 148, 150);">,<span class="Apple-converted-space">&nbsp;</span></span>Zero<span class="" style="color: rgb(131, 148, 150);">,<span class="Apple-converted-space">&nbsp;</span></span>Zero<span class="" style="color: rgb(131, 148, 150);">&gt;<span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(88, 110, 117);">// dimensionless</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="Apple-converted-space">&nbsp;</span>Length &nbsp; =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">One</span>,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Zero</span>,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Zero</span>&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(88, 110, 117);">// meter</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="Apple-converted-space">&nbsp;</span>Time &nbsp; &nbsp; =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">Zero</span>,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">One</span>,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Zero</span>&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(88, 110, 117);">// seconds</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="Apple-converted-space">&nbsp;</span>Mass &nbsp; &nbsp; =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Quantity</span>&lt;<span class="" style="color: rgb(181, 137, 1);">Zero</span>,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Zero</span>,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">One</span>&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(88, 110, 117);">// kilogram</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(181, 137, 1);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>Velocity =<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>One<span class="" style="color: rgb(131, 148, 150);">,<span class="Apple-converted-space">&nbsp;</span></span>MinusOne<span class="" style="color: rgb(131, 148, 150);">,<span class="Apple-converted-space">&nbsp;</span></span>Zero<span class="" style="color: rgb(131, 148, 150);">&gt;<span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(88, 110, 117);">// m/s</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(181, 137, 1);"><span class="" style="color: rgb(133, 153, 1);">public</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(133, 153, 1);">typealias</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>Newton &nbsp; =<span class="Apple-converted-space">&nbsp;</span></span>Quantity<span class="" style="color: rgb(131, 148, 150);">&lt;</span>One<span class="" style="color: rgb(131, 148, 150);">,<span class="Apple-converted-space">&nbsp;</span></span>MinusTwo<span class="" style="color: rgb(131, 148, 150);">,<span class="Apple-converted-space">&nbsp;</span></span>One<span class="" style="color: rgb(131, 148, 150);">&gt;<span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(88, 110, 117);">// m*kg/s^2</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(133, 153, 1);">public<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span>extension<span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span></span><span class="" style="color: rgb(181, 137, 1);">Double</span><span class="" style="color: rgb(131, 148, 150);"><span class="Apple-converted-space">&nbsp;</span>{</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(133, 153, 1);"><span class="" style="color: rgb(131, 148, 150);">&nbsp; &nbsp;&nbsp;</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">var</span><span class="Apple-converted-space">&nbsp;</span>m:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Length</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Length</span>(<span class="" style="color: rgb(133, 153, 1);">self</span>)</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">var</span><span class="Apple-converted-space">&nbsp;</span>s:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Time</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Time</span>(<span class="" style="color: rgb(133, 153, 1);">self</span>)</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">var</span>&nbsp;kg:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Mass</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(133, 153, 1);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Mass</span>(<span class="" style="color: rgb(133, 153, 1);">self</span>)</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">&nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);">}</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150); min-height: 15px;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">let</span><span class="Apple-converted-space">&nbsp;</span>dist =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(41, 161, 152);">10</span>.<span class="" style="color: rgb(211, 54, 130);">m +&nbsp;</span><span class="" style="color: rgb(41, 161, 152);">5</span><span class="" style="color: rgb(211, 54, 130);">.m</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">let</span><span class="Apple-converted-space">&nbsp;</span>time =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(41, 161, 152);">20</span>.<span class="" style="color: rgb(211, 54, 130);">s</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">let</span><span class="Apple-converted-space">&nbsp;</span>mass =<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(41, 161, 152);">5</span>.<span class="" style="color: rgb(211, 54, 130);">kg</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">let</span><span class="Apple-converted-space">&nbsp;</span>velocity:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Velocity</span><span class="Apple-converted-space">&nbsp;</span>=<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(211, 54, 130);">dist</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(108, 113, 196);">/</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(211, 54, 130);">time</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="color: rgb(133, 153, 1);">let</span><span class="Apple-converted-space">&nbsp;</span>force:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(181, 137, 1);">Newton</span><span class="Apple-converted-space">&nbsp;</span>=<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(211, 54, 130);">mass</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(108, 113, 196);">*</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(211, 54, 130);">dist</span><span class="Apple-converted-space">&nbsp;</span>/ (<span class="" style="color: rgb(211, 54, 130);">time</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(108, 113, 196);">*</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(211, 54, 130);">time</span>)</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="font-family: Helvetica; font-size: 12px;">-Thorsten</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="font-family: Helvetica; font-size: 12px;"><br class=""></span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Menlo; color: rgb(131, 148, 150);"><span class="" style="font-family: Helvetica; font-size: 12px;"><br class=""></span></div><div class=""><blockquote type="cite" class=""><div class="">Am 31.12.2015 um 18:25 schrieb Dave Abrahams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt;:</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;"><blockquote type="cite" class=""><div class=""><br class="Apple-interchange-newline">On Dec 25, 2015, at 4:43 PM, Nickolas Pohilets 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 dir="ltr" class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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;">If Swift would support non-type generic parameters, then I would like to have Boost.Unit library (<a href="http://www.boost.org/doc/libs/1_60_0/doc/html/boost_units.html" class="">http://www.boost.org/doc/libs/1_60_0/doc/html/boost_units.html</a>) available in Swift.</div></div></blockquote><div class=""><br class=""></div>Yes, that’s an excellent design. &nbsp;We really want to do this when we get the necessary language features (I hope we might also come up with some that improve readability a bit over what you can do in C++).</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=""><blockquote type="cite" class=""><div class=""><div class="gmail_extra" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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="gmail_quote">2015-12-25 4:36 GMT+01:00 Stephen Christopher via swift-evolution<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span>:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div dir="ltr" class="">I have been working for a couple weeks (since the previous [newtype discussion](<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151207/001821.html" target="_blank" class="">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151207/001821.html</a>) ) on a related pitch. There seem to me to be multiple ways to solve this problem - a newtype(esque) keyword, struct subtyping, or forwarding as Matthew is suggesting. I’d hoped to have a discussion starter out before the holidays, but it takes a fair amount of work to put together even a decent draft for a proposal. This is top of my list currently for a way to contribute though. Looking forward to the ensuing discussions.<div class=""><br class=""></div><div class="">Thanks for the pointer on class delegation. I’ve looked at delegated properties there (which came up in relation to Joe’s recent proposal for behaviors on properties).</div><div class="gmail_extra"><br clear="all" class=""><div class=""><div class=""><div dir="ltr" class="">- Step Christopher<div class=""><br class=""></div><div class=""></div><div class=""><br class=""></div></div></div></div><div class=""><div class="h5"><br class=""><div class="gmail_quote">On Thu, Dec 24, 2015 at 2:40 PM, Matthew Johnson via swift-evolution<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span><span class="Apple-converted-space">&nbsp;</span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><br class=""><br class="">Sent from my iPad<br class=""><span class=""><br class="">&gt; On Dec 24, 2015, at 1:07 PM, Tino Heth &lt;<a href="mailto:2th@gmx.de" target="_blank" class="">2th@gmx.de</a>&gt; wrote:<br class="">&gt;<br class="">&gt;<br class="">&gt;&gt; I'm planning to write a proposal for automatic forwarding.<br class="">&gt; Something like class delegation in Kotlin?<br class="">&gt; Please hurry, I've no work to distract me for the rest of the year, and extending typealias could be a very quick proposal ;-)<br class=""><br class=""></span>Details are still brewing.&nbsp; I am not familiar with class delegation in Kotlin but will look it up.&nbsp; Thanks for mentioning it!<br class=""><br class="">I plan to spend a lot of time on Swift proposal work over the next week and a half but can't make any promises on timing.&nbsp; I made that mistake with my proposal on flexible memberwise initialization which ended up taking a couple weeks longer than I expected (for several reasons).&nbsp; What I can say is that this is pretty high on my Swift proposal priority list.<br class=""><br class="">Matthew<br class=""><div class=""><div 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/mailman/listinfo/swift-evolution</a><br class=""></div></div></blockquote></div><br class=""></div></div></div></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=F3-2FhZ2ZT-2F5bSvaJOoTvgalN0e-2BU0US-2FQkEU38GOYp5uqcG-2BT-2BgCAM5jeVklylPeXjXsS0Q7SwJwy3yHAfmWE3Kui4LbB8nL7-2F67E2XkFNH3zd1dvkeaCD2JkZi7-2FaO0o7qrGCxnwTlXMWqiDAb7xpfxfZ1vQkUBXx0bvS4TJM4qSzmQ-2FxHg2SCzOCRV3XWxwku38IkedXFOaje-2Bkm2QHCN5Ho0V9lGX8InSDUkSCdbw-3D" alt="" width="1" height="1" border="0" class="" style="min-height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;"><span class="Apple-converted-space">&nbsp;</span><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" 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/mailman/listinfo/swift-evolution</a><br class=""><br class=""></blockquote></div><br class=""></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=JfMPa-2F7wwZPzsZ3QKA8NjtONIYX4SjbWuUxtpfsTY2gp1Hyorbz93gvYpEh0HB6G3khSYbYStuXG61c5A-2FjtRDJQW-2FI6iz99rbuuv4-2B0OTtIp6lsp7Xw9Fv6vp1uIAtQRqx2LTtUUFJaXSHyAojpjL3otqi61AwBIf3YneRRpLJGu34X-2FY-2F-2BCunORGLwWOR7mPE84qW27TT-2BJJcDX8pF-2FCkguvO6-2FlGBXFtbO9uvmKM-3D" alt="" width="1" height="1" border="0" class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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;"><span class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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;"><span class="Apple-converted-space">&nbsp;</span>_______________________________________________</span><br class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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;"><span class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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;">swift-evolution mailing list</span><br class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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="mailto:swift-evolution@swift.org" class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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;">swift-evolution@swift.org</a><br class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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://lists.swift.org/mailman/listinfo/swift-evolution" class="" style="font-family: AvenirNext-Medium; font-size: 15px; font-style: 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;">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br 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;"><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;">-Dave</div><br 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;"><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=1MXK54sosN3xru3iYcLt0oBZ2w20i49gyogXctgrspdLkRgMP1CgQF37IBHoQWWE0cIYysRnCQm-2BTDV6TUEwv9mXliKlkYL1GKBQ0gbMLk-2BevrljGBlZF3TPAE0puNQRkd2RapXizpfwXQAVyAJv5xs-2FzWowH3hnzaMIPhg6GTBr8OmMNx0mHegqHZelaxlfjy5yMPCZvnai-2FHimIMsk4Hpl70cY60EE6cQO4ooks5M-3D" alt="" width="1" height="1" border="0" 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; height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;"><span 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; float: none; display: inline !important;"><span class="Apple-converted-space">&nbsp;</span>_______________________________________________</span><br 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;"><span 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; float: none; display: inline !important;">swift-evolution mailing list</span><br 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="mailto:swift-evolution@swift.org" 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;">swift-evolution@swift.org</a><br 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://lists.swift.org/mailman/listinfo/swift-evolution" 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;">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br class=""></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=iRI3beHTe3UxYAHTlV3lA38zIPfHMhyuRzgTmGKV6k67XjBrqxjeuyNfFlpq-2BEl2VRlJ2QMt9eOJojAfKbX1bL2ji9xyYjx1Z6eNFWsNTuvqQIKUWjqrDCXNirhRwxOtg2AW13afroztVNVVwfU7mnjJOf2reifqYpp52XlVb54V-2FCvqOW4jC0Nkc921eH4ue9QF2naG0VwDXFvORdVT2bko7Jgc-2F0u4Fvj3A6J5BoI-3D" alt="" width="1" height="1" border="0" style="font-family: LucidaGrande; 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: LucidaGrande; 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">&nbsp;</span>_______________________________________________</span><br style="font-family: LucidaGrande; 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: LucidaGrande; 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: LucidaGrande; 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: LucidaGrande; 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: LucidaGrande; 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: LucidaGrande; 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=""></body></html>