<div>-1 for checked exceptions. Don&#39;t make it java. For thous interested why, just google. It&#39;s common frustration in Java world so the info is everywhere.</div><div><br></div><div>In general you end up with wrapping and wrapping and wrapping the fine grained exceptions into general ones. And you have more exception classes than functional ones. Please, don&#39;t go this path.</div><div><br><div class="gmail_quote"><div>On Wed, 28 Dec 2016 at 3:46 thislooksfun via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg">That&#39;s fair. The reasoning I read about mentioned making it easier for newcomers, but it&#39;s very possible that was a 3rd party opinion (I don&#39;t remember). I certainly did not intend to upset anyone.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Either way, I do still believe that the current placement / syntax isn&#39;t entirely clear.<br class="gmail_msg"><div class="gmail_msg"><br><br><div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;word-wrap:break-word" class="gmail_msg"><br class="gmail_msg">-thislooksfun (tlf)</div><br><br><br><br></div><br><br><br class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Dec 27, 2016, at 4:09 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" class="gmail_msg" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="m_6098335820352167309Apple-interchange-newline gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">Offlist on purpose?</div><div class="gmail_msg"><br class="gmail_msg"></div>On Tue, Dec 27, 2016 at 5:03 PM, thislooksfun <span class="gmail_msg">&lt;<a href="mailto:thislooksfun@repbot.org" class="gmail_msg" target="_blank">thislooksfun@repbot.org</a>&gt;</span> wrote:<br class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg">Thinking about it logically, it&#39;s placement does fit, yes.</div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">:) That&#39;s all one can ask.</div><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg">I&#39;m not debating that the current placement is logical once you get used to it, but on a related note, so are ++ and --, which were removed to make the language easier and more immediately intuitive for new programmers.</div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Bringing up ++ and -- on the list just makes everyone unhappy; also, classical for;; loops. It&#39;s like Godwin&#39;s law for Swift Evolution :P</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">But FWIW, making it easier for new programmers was not the whole rationale (or, if I recall, even a large part of it). There&#39;s a whole school of thought in language design that removing ++ and -- and for;; loops is the _more logical_ thing to do from a modern language design perspective. I don&#39;t have the link, but there was an article recently evaluating Rust, Go, Swift, and a bunch of other C-family languages for the &quot;quality&quot; of their design. An opinionated piece, to be sure, but having ++ and for;; were regarded as negatives that languages would lose points for. So let&#39;s be clear that it&#39;s not a way of thinking that originated from Swift wanting to help beginners, nor is it even limited to Swift at all.</div><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg">My only point was that if they are willing to go to such lengths to make the language easy to understand as to remove a very well known feature like the incremention and decremention operators, maybe the placement of `throws` should be reviewed to make sure it&#39;s also intuitive.<br class="gmail_msg"><div class="gmail_msg"><br><br><div style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;word-wrap:break-word" class="gmail_msg"><br class="gmail_msg">-thislooksfun (tlf)</div><br><br><br><br></div></div></blockquote></div></div></div></div></blockquote></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="m_6098335820352167309h5 gmail_msg"><br><br><br class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Dec 27, 2016, at 3:58 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" class="gmail_msg" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="m_6098335820352167309m_-9049357509343812772Apple-interchange-newline gmail_msg"><div class="gmail_msg"><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" class="gmail_msg"><div class="gmail_msg">Agree, it doesn&#39;t seem to read naturally at first glance.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">However, one way perhaps to think about the rationale for this is that `throws` does &quot;fit&quot; logically between the parameters and the return type: a function that throws might take certain arguments and, by throwing, never return a value of the stated return type. In that perspective, `throws` could be justified in its current position interposed between the input and the desired output.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div>On Tue, Dec 27, 2016 at 4:51 PM, thislooksfun via swift-evolution<span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span><span class="gmail_msg">&lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt;</span><span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span>wrote:<br class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" 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 style="word-wrap:break-word" class="gmail_msg">If some form of explicitly typed errors is added, my initial problem goes away. The only reason I suggested the move in the first place, is that a combination of `throws` and return (-&gt; T) statements makes it<span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span><i class="gmail_msg">look</i> like there is already explicitly typed errors, especially to those of us coming from Java.<br class="gmail_msg"><div class="gmail_msg"><div style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;word-wrap:break-word" class="gmail_msg"><br class="gmail_msg">-thislooksfun (tlf)</div></div><div class="gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772h5 gmail_msg"><br class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Dec 27, 2016, at 3:41 PM, Karl via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638Apple-interchange-newline gmail_msg"><div class="gmail_msg"><div style="word-wrap:break-word" class="gmail_msg">Moving “throws” or changing it to a prefix “throwing” as was originally suggested are relatively minor, reasonable improvements.<br class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">We do need to consider if it restricts future language evolution (such as potentially listing all of the thrown errors), so that’s why it’s relevant to talk a little bit about that and what are options would be; but I think fundamental, non-backwards compatible changes to how you invoke throwing functions are probably too big to be reasonable.</div><div class="gmail_msg"><br class="gmail_msg"></div></div></div></blockquote></div></div></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I&#39;m -1 on big changes such as suggested as well. The deliberate choice to separate error handling from other code with `do { }` was a deliberate design choice and it&#39;d be very disruptive to break that now. And in terms of just gut feeling, switching over errors and return values at the same time seems like going in the wrong direction.</div><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" 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 style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772h5 gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"></div><div class="gmail_msg">- Karl</div><div class="gmail_msg"><br class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On 27 Dec 2016, at 22:31, Derrick Ho &lt;<a href="mailto:wh1pch81n@gmail.com" class="gmail_msg" target="_blank">wh1pch81n@gmail.com</a>&gt; wrote:</div><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638Apple-interchange-newline gmail_msg"><div class="gmail_msg">Right. it should support the normal return type as well as the errors. Here is my revised suggestion.<br class="gmail_msg"><br class="gmail_msg">func foo() throws -&gt; String {}<br class="gmail_msg"><br class="gmail_msg">switch try foo() {<br class="gmail_msg">case .returnValue(let value):<br class="gmail_msg">// do something with value<br class="gmail_msg"><br class="gmail_msg">case .MyEnumErrorFirstError:<br class="gmail_msg">// handle error<br class="gmail_msg"><br class="gmail_msg">default:<span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span><br class="gmail_msg">// handle NSError<br class="gmail_msg">}<br class="gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">On Tue, Dec 27, 2016 at 1:17 PM Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" class="gmail_msg" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" 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 class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">On Tue, Dec 27, 2016 at 4:03 PM, Derrick Ho via swift-evolution<span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span><span class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">&lt;<a href="mailto:swift-evolution@swift.org" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt;</span><span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span>wrote:<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_extra m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><blockquote class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" 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">I suppose &quot;throws&quot; could be enhanced to produce a compiletime enum<span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">func bar() throws {<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">throw NSError()<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">throw MyEnumError.firstError<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">}<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">Under the hood each expression passed to &quot;throw&quot; could make something like<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">enum bar_abcdefj_throw {<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">case genericError // all NSError go here<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">case MyEnumErrorFirstError<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">}<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">Where abcdefj is unique characters.<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">This enum would only be visible through the catch blocks which would act like a switch statement.<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">Speaking of switch statements do they currently support &quot;try&quot; expressions?<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">switch try foo() {<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">case .MyEnumErrorFirstError:<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">// handle error<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">default:<span class="m_6098335820352167309m_-9049357509343812772Apple-converted-space gmail_msg"> </span><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">// handle NSError and everything else<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">}<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"></blockquote><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"></div></div></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_extra m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">If I&#39;m not mistaken, `switch try foo()` switches over the return value of foo(); you&#39;d switch over the error in a catch block.</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"> </div><blockquote class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" 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"></blockquote></div></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_extra m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><blockquote class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" 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">The benefit of this approach is that it would be additive. And no source breakage.<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">At the risk of being off topic if there is interest in this I can start a new thread for this.<div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581HOEnZb gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581h5 m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">On Tue, Dec 27, 2016 at 9:54 AM Haravikk &lt;<a href="mailto:swift-evolution@haravikk.me" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" target="_blank">swift-evolution@haravikk.me</a>&gt; wrote:<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"></div><blockquote class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" 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 class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><blockquote type="cite" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">On 27 Dec 2016, at 13:43, Tino Heth &lt;<a href="mailto:2th@gmx.de" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" target="_blank">2th@gmx.de</a>&gt; wrote:</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">Imho this is no problem:</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">Right now, we basically have &quot;throws Error&quot;, and no matter what is actually thrown, we can always catch exhaustive by keeping the statement unspecific.</div></div></div></div></blockquote><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"></div></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">True, but for me it&#39;s more about knowing what a method can throw; currently to know that you need to consult documentation which, while fine, isn&#39;t the best way to do that when the compiler could know and it&#39;s then up to you whether to let it auto-complete for all throwable types, or just be generic for some or all of them (or pass the buck).</div></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><blockquote type="cite" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><blockquote type="cite" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><span class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="font-family:Monaco">myMethod(args:[String:Any]) throws IOError, IllegalArgumentError? { … }</span></blockquote></div>Imho to much confusion with no real benefit:<div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">Shouldn&#39;t it be up to the caller to decide which errors need special treatment? The library can&#39;t enforce proper handling at all.</div></div></blockquote><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"></div></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">Partly, but it&#39;s really just intended to distinguish things that are genuine runtime errors, versus things that shouldn&#39;t have happened, i.e- an illegal argument type error shouldn&#39;t occur if you&#39;re using a method correctly, so it&#39;s more like something you might check as an assertion. I should have been more clear that the main difference is in how fix-its might recommend the errors are handled; specific types would produce catch blocks, but optionals might be grouped into a catch-all at the end (e.g- they&#39;re special interest that you might not be bothered about), but the compiler would still be aware of them should you decide to add them.</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">If the distinctions not significant enough though then the &quot;optional&quot; error types could just be ignored for now, I think the more important ability is the ellipsis indicating &quot;plus other errors&quot; so we can specify either exhaustive lists of error types, or keep them open-ended, in which case the types listed are those that would be placed as catch blocks, with the ellipsis indicating that a catch-all is still required (or throw on the current method).</div></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><blockquote type="cite" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">One thing to note with explicit errors is that we&#39;d basically introduce sum types…</div></div></blockquote></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg" style="word-wrap:break-word"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"></div><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">Not necessarily; you could think of explicit errors as being doing something like:</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><span class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406m_7179559898482663862Apple-tab-span m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" style="white-space:pre-wrap">        </span>enum MyErrorType {</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><span class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406m_7179559898482663862Apple-tab-span m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" style="white-space:pre-wrap">                </span>case io_error(IOError)</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><span class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406m_7179559898482663862Apple-tab-span m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" style="white-space:pre-wrap">                </span>case illegal_argument(IllegalArgumentError)</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><span class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406m_7179559898482663862Apple-tab-span m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" style="white-space:pre-wrap">                </span>case unknown(Error)</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><span class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406m_7179559898482663862Apple-tab-span m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" style="white-space:pre-wrap">        </span>}</div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg"></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg m_6098335820352167309m_-9049357509343812772m_8597572834478154638m_6634727487067944581m_2322409923842249406gmail_msg gmail_msg">i.e- boilerplate we could do right now, but would prefer not to, but still allowing it to be handled as an enum.</div></div></blockquote></div></div></div><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"></blockquote></div></div></div><div class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_extra m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><div class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><blockquote class="gmail_quote m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" 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="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg">swift-evolution mailing list<br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><a href="mailto:swift-evolution@swift.org" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"><br class="m_6098335820352167309m_-9049357509343812772m_8597572834478154638gmail_msg gmail_msg"></blockquote></div></div></div></blockquote></div></div></blockquote></div><br class="gmail_msg"></div></div>_______________________________________________<br class="gmail_msg">swift-evolution mailing list<br class="gmail_msg"><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"></div></blockquote></div><br class="gmail_msg"></div></div></div><br class="gmail_msg">_______________________________________________<br class="gmail_msg">swift-evolution mailing list<br class="gmail_msg"><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a></blockquote></div></div></div></div></blockquote></div><br class="gmail_msg"></div></div></div></blockquote></div></div></div></div></blockquote></div></div></div>_______________________________________________<br class="gmail_msg"><br>swift-evolution mailing list<br class="gmail_msg"><br><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"><br></blockquote></div></div>