<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><blockquote type="cite" class=""><div class="">On Jul 31, 2017, at 1:45 PM, Robert Widmann &lt;<a href="mailto:rwidmann@apple.com" class="">rwidmann@apple.com</a>&gt; 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; line-break: after-white-space;" class=""><div class="">As I was saying, I agree with the overall usefulness of <font face="Menlo" class="">newtype</font>-style declarations, but I don’t understand why we need so much syntax for what should just be a pattern in Swift. &nbsp;Specifically, the idea of automatic delegation of an interface is antithetical to the very reason why Haskell has <font face="Menlo" class="">newtype</font> in the first place. &nbsp;And in the situations in which I would create an <font face="Menlo" class="">alter</font>nate definition of a type, I expect to <i class="">never</i>&nbsp;inherit the interface of the underlying type because I intend for it to be completely distinct.&nbsp;</div></div></div></blockquote><div><br class=""></div><div>What would this pattern look like?</div><div><br class=""></div><div>An alternative inherits nothing by default. You have to explicitly publish members from the underlying type to the current one. And you don’t have to; you can leave members out, or implement trampolines yourself. I wanted something between Go’s taking everything and C++’s taking nothing, more selectable like Haskell. (But I don’t really understand Haskell.)</div><div><br class=""></div><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">Additionally, the use of inheritance in&nbsp;<font face="Menlo" class="">alter</font>nate definitions seems out of place and the casting section breaks encapsulation.</div></div></div></blockquote><div><br class=""></div><div>Enumerations use similar syntax to specify their raw type. What word, which may have to be new, should be used to serve a similar function as “super” within the main initializer?</div><div><br class=""></div><div>Isn’t breaking (or at least bending) encapsulation a point of casting? And shorter than calling “rawValue” and/or “init?” a bunch of times?</div><div><br class=""></div><div><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">—&nbsp;</div><div class="">Daryle Walker<br class="">Mac, Internet, and Video Game Junkie<br class="">darylew AT mac DOT com&nbsp;</div></div></div><br class=""><div><blockquote type="cite" class=""></blockquote></div></div></div></body></html>