<div dir="ltr"><div>Hi Julien,</div><div><br></div><div>In the below message you mentioned it would be better NOT to do:</div><div><br></div><div><span style="font-family:courier new,monospace">exception.throw("Badness happened, terminating")</span></div><div><br></div><div>Which is something I do quite a lot of to get a non-local exit.   As in, the exception should never be handled, I just want the program to halt with some appropriate error message.<br></div><div><br></div><div>It sounded like you recommended the following instead (note the addition of the exception.software_error):</div><div><br></div><div><span style="font-family:courier new,monospace">exception.throw(  exception.software_error("Badness happened, terminating")  )</span></div><div><br></div><div>Which is a bit more typing, but I don't see how this makes things any better.   A new type for each kind of exception makes sense to me if I wanted to handle my exceptions, but boxing all messages as software_error types doesn't intuitively make sense to me.<br></div><div><br></div><div>Can you explain your reasoning for me??<br></div><div><br></div><div><br></div><div>Thanks!</div><div><br></div><div><br></div><div>Charles<br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 7, 2019 at 12:29 AM Julien Fischer <<a href="mailto:jfischer@opturion.com">jfischer@opturion.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Hi,<br>
<br>
On Tue, 7 May 2019, Barthwal wrote:<br>
<br>
> Can a pure function throw exceptions?<br>
<br>
In Mercury, yes.<br>
<br>
> I don't plan to catch these functions in pure function.<br>
<br>
If you wanted to, you could.  (Although doing so may affect<br>
the determinism for your function.)<br>
<br>
> But if something illegal happens, I want to send a message like:<br>
> <br>
> throw error("Some Message")<br>
<br>
Assuming you don't catch the exception within your program, the<br>
runtime's uncaught exception handler will print the exception out when<br>
the exception propagates back past main/2.   (It may also print a stack<br>
trace if you're using a grade that records that information.)<br>
<br>
As a general rule, I would recommend not throwing strings about.  The<br>
library has a builtin type named software_error/1 which is suitable for<br>
exceptions where something illegal happens.<br>
<br>
Julien.<br>
_______________________________________________<br>
developers mailing list<br>
<a href="mailto:developers@lists.mercurylang.org" target="_blank">developers@lists.mercurylang.org</a><br>
<a href="https://lists.mercurylang.org/listinfo/developers" rel="noreferrer" target="_blank">https://lists.mercurylang.org/listinfo/developers</a><br>
</blockquote></div>