<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 9, 2017, at 1:11 PM, Anton Zhilin &lt;<a href="mailto:antonyzhilin@gmail.com" class="">antonyzhilin@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important" class="">I also thought about sum types as implementation of errors, but selecting between Tyler’s and John’s syntaxes, I would pick the latter. Compare:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px" class=""><code class="language-swift hljs" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> x: (<span class="hljs-number" style="color:rgb(0,128,128)">_</span> a: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>) -&gt; (<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span> | (<span class="hljs-number" style="color:rgb(0,128,128)">_</span> b: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Float</span>) -&gt; (<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span> | <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Double</span>))

<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> x: (<span class="hljs-number" style="color:rgb(0,128,128)">_</span> a: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>) throws(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span>) -&gt; (<span class="hljs-number" style="color:rgb(0,128,128)">_</span> b: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Float</span>) throws(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span>) -&gt; <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Double</span>

<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> x: (<span class="hljs-number" style="color:rgb(0,128,128)">_</span> a: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>) -&gt; (<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span> | <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Double</span>)

<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> x: (<span class="hljs-number" style="color:rgb(0,128,128)">_</span> a: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>) throws(<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span>) -&gt; <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Double</span>
</code></pre><p style="margin:0px 0px 1.2em!important" class="">Granted, the version with sum types contains less characters and leads to more minimalistic type system. But <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="">|</code> on itself does not mean error handling. It’s used for creation of sum types, without error handling semantics. So it’s easier to grasp the meaning of type containing <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="">throws</code> than anything else. If Swift had a special symbol as related to errors, as <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline" class="">?</code> relates to optionals, then we could use it there. Unfortunately, there isn’t anything like that.</p>
<blockquote style="margin:1.2em 0px;border-left:4px solid rgb(221,221,221);padding:0px 1em;color:rgb(119,119,119);quotes:none" class=""><p style="margin:0px 0px 1.2em!important" class="">What would it look like if the function returns nothing but can throw an error?</p>
</blockquote>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px" class=""><code class="language-swift hljs" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> x: (<span class="hljs-number" style="color:rgb(0,128,128)">_</span> a: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>) -&gt; (<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span> | ())
</code></pre>
<div title="MDH:PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2Pkkg
YWxzbyB0aG91Z2h0IGFib3V0IHN1bSB0eXBlcyBhcyBpbXBsZW1lbnRhdGlvbiBvZiBlcnJvcnMs
IGJ1dCBzZWxlY3RpbmcgYmV0d2VlbiBUeWxlcidzIGFuZCBKb2huJ3Mgc3ludGF4ZXMsIEkgd291
bGQgcGljayB0aGUgbGF0dGVyLiBDb21wYXJlOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBg
c3dpZnQ8L2Rpdj48ZGl2PmxldCB4OiAoXyBhOiBJbnQpIC0mZ3Q7IChFcnJvciB8IChfIGI6IEZs
b2F0KSAtJmd0OyAoRXJyb3IgfCBEb3VibGUpKTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+bGV0
IHg6IChfIGE6IEludCkgdGhyb3dzKEVycm9yKSAtJmd0OyAoXyBiOiBGbG9hdCkgdGhyb3dzKEVy
cm9yKSAtJmd0OyBEb3VibGU8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmxldCB4OiAoXyBhOiBJ
bnQpIC0mZ3Q7IChFcnJvciB8IERvdWJsZSk8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PmxldCB4
OiAoXyBhOiBJbnQpIHRocm93cyhFcnJvcikgLSZndDsgRG91YmxlPC9kaXY+PGRpdj5gYGA8L2Rp
dj48ZGl2Pjxicj48L2Rpdj48ZGl2PkdyYW50ZWQsIHRoZSB2ZXJzaW9uIHdpdGggc3VtIHR5cGVz
IGNvbnRhaW5zIGxlc3MgY2hhcmFjdGVycyBhbmQgbGVhZHMgdG8gbW9yZSBtaW5pbWFsaXN0aWMg
dHlwZSBzeXN0ZW0uIEJ1dCBgfGAgb24gaXRzZWxmIGRvZXMgbm90IG1lYW4gZXJyb3IgaGFuZGxp
bmcuIEl0J3MgdXNlZCBmb3IgY3JlYXRpb24gb2Ygc3VtIHR5cGVzLCB3aXRob3V0IGVycm9yIGhh
bmRsaW5nIHNlbWFudGljcy4gU28gaXQncyBlYXNpZXIgdG8gZ3Jhc3AgdGhlIG1lYW5pbmcgb2Yg
dHlwZSBjb250YWluaW5nIGB0aHJvd3NgIHRoYW4gYW55dGhpbmcgZWxzZS4gSWYgU3dpZnQgaGFk
IGEgc3BlY2lhbCBzeW1ib2wgYXMgcmVsYXRlZCB0byBlcnJvcnMsIGFzIGA/YCByZWxhdGVzIHRv
IG9wdGlvbmFscywgdGhlbiB3ZSBjb3VsZCB1c2UgaXQgdGhlcmUuIFVuZm9ydHVuYXRlbHksIHRo
ZXJlIGlzbid0IGFueXRoaW5nIGxpa2UgdGhhdC48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PiZn
dDsgV2hhdCB3b3VsZCBpdCBsb29rIGxpa2UgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm90aGlu
ZyBidXQgY2FuIHRocm93IGFuIGVycm9yPzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBgc3dp
ZnQ8L2Rpdj48ZGl2PmxldCB4OiAoXyBhOiBJbnQpIC0mZ3Q7IChFcnJvciB8ICgpKTwvZGl2Pjxk
aXY+YGBgPGJyPjwvZGl2PjwvZGl2PjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0" class="">​</div></div></div>
</div></blockquote></div><br class=""><div class=""><br class=""></div><div class="">Or even possibly just</div><div class=""><div dir="ltr" class=""><div class="markdown-here-wrapper"><pre class="" style="font-family: Consolas, Inconsolata, Courier, monospace; font-size: 1em; line-height: 1.2em; margin-top: 1.2em; margin-bottom: 1.2em;"><code class="language-swift hljs" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace; margin: 0px 0.15em; overflow: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em; color: rgb(51, 51, 51); background-color: rgb(248, 248, 248); display: block !important;"><span class="hljs-keyword" style="font-weight: bold;">let</span> x: (<span class="hljs-number" style="color: rgb(0, 128, 128);">_</span> a: <span class="hljs-type" style="color: rgb(68, 85, 136); font-weight: bold;">Int</span>) -&gt; <span class="hljs-type" style="color: rgb(68, 85, 136); font-weight: bold;">Error</span></code></pre></div></div><div class="">depending on your tastes.</div></div></body></html>