<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="">I would, but I kind of have it in pieces all over the floor at the moment, because I was experimenting with an alternate implementation using an enum.<div class=""><br class=""></div><div class="">-jcr</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 7, 2016, at 7:02 AM, James Campbell &lt;<a href="mailto:james@supmenow.com" class="">james@supmenow.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">If it helps I would be happy to start a library for this, which could be later added to the standard library :)</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Thu, Jan 7, 2016 at 3:01 PM, James Campbell <span dir="ltr" class="">&lt;<a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">Interesting could you upload :) would be good to consolidate all the approaches we have right now so we can come up with the best one:<div class=""><br class=""></div><div class="">So far we have:</div><div class=""><br class=""></div><div class="">- Box/Unit Type Protocol (My Solution)</div><div class="">- Math Group Protocol (Tino Heth)</div><div class="">- Computed typealias (John Randolph)</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote"><div class=""><div class="h5">On Thu, Jan 7, 2016 at 2:55 PM, John Randolph via swift-evolution <span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span> wrote:<br class=""></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><div class="h5"><div style="word-wrap:break-word" class=""><br class=""><div class=""><div class=""><div style="word-wrap:break-word" class=""><span class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 7, 2016, at 4:06 AM, James Campbell via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class=""><div class=""><div dir="ltr" style="font-family:MyriadSet-Text;font-size:12.75px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" class="">So this is how this feature could be achieved right now with minimal changes to the language.<div class=""><br class=""></div><div class="">- We expose some kind of protocol that allows you to Box up types, we could call this `Box` or something else like `Unit`. (I have a working implementation in the current language with a bit of boilerplate). This protocol handles the default implementation of converting from literals and to floats etc.</div><div class="">- For each type-safe unit for a calculation - you define a protocol extending this `Box` type which defines the associated type of the value that unit holds. For example for Degree and Radian I declared a `AngleType` which set the associated type to be a double.&nbsp;</div><div class="">- For each unit type, you declare a struct that inherits from that protocol you defined. So I have two structs `Degree` and `Radian` which implement the `AngleType` protocol.</div><div class="">- You implement the functions for figuring out if your units are equal and all other operators they may need i.e `Degree(360) - 30`.</div></div></div></blockquote><br class=""></div></span><div class="">I took a different approach to this, which was to just typealias Angle to Double, &nbsp;keep all Angle values as radians (since the stdlib trig functions take radians), and add some computed setters and getters to let me access an Angle in radians, degrees, or grads.</div><span class=""><div class=""><br class=""></div><div class="">I would like to see Angle, along with several other basic geometric concepts, promoted to the Swift standard library.&nbsp;</div><div class=""><br class=""></div><div class="">-jcr</div></span></div></div></div><br class="">
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=xV0JY-2FdZMnUMvSFtZnLiBPRTDDOSQf3-2FpH33HYOlBxFUeA1qfgrAvnZzNdBt3k7Z8JorPwUolivYPI01b8tLIb8dbX2fq47jEUdQJ8-2F16Op3-2B3A4OxWdHQPVbVvunVDHvCai-2BPjCTuooMQZ9uPeMQkdUfwLJb6NLtEfqic6DvyLjg9CVksJmixykYOHyCGxtWNqM7YuSP8Pnj849-2BP5Nnu5EbuIabX3IX6-2BeO7AFMAE-3D" alt="" width="1" height="1" border="0" style="min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important" class="">
</div>
<br class=""></div></div><span 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="">
<br class=""></span></blockquote></div><br class=""><br clear="all" class=""><span class=""><div class=""><br class=""></div>-- <br class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><span style="font-size:16px;line-height:19.2px" class=""></span><span style="font-size:12.8px" class="">&nbsp;Wizard</span><br class=""></div><div class=""><a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a></div><div class=""><a href="tel:%2B44%207523%20279%20698" value="+447523279698" target="_blank" class="">+44 7523 279 698</a></div></div></div></div></div></div>
</span></div>
</blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><span style="font-size:16px;line-height:19.2px" class=""></span><span style="font-size:12.8px" class="">&nbsp;Wizard</span><br class=""></div><div class=""><a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a></div><div class="">+44 7523 279 698</div></div></div></div></div></div>
</div>
</div></blockquote></div><br class=""></div></body></html>