<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi, <div><br></div><div>I want to write a type spec for a function that throws exceptions, something like this:</div><div><br></div><div><blockquote type="cite">-spec where(G :: atom()) -> pid() | throw({no_name,atom()}).<br></blockquote><div><br></div>I don't want to use an exit signal, because this behaviour is intentional and the calling process will catch this and take specific action.  But I can't write this using the -spec syntax. The documentation says:</div><div><span style="background-color: rgb(255, 255, 255); font-family: Verdana, Arial, Helvetica, sans-serif; "><br></span></div><div></div><blockquote type="cite"><div><span style="background-color: rgb(255, 255, 255); font-family: Verdana, Arial, Helvetica, sans-serif; ">Some functions in Erlang are not meant to return; either because they define servers or because they are used to throw exceptions as the function below:</span></div><div><div class="example" style="background-color: rgb(238, 238, 255); padding: 0px 10px; font-family: Verdana, Arial, Helvetica, sans-serif; "><pre style="font-family: Courier, monospace; ">  my_error(Err) -> erlang:throw({error, Err}).</pre></div><p style="font-family: Verdana, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); ">For such functions we recommend the use of the special <span class="code" style="font-family: Courier, monospace; ">no_return()</span> type for their "return", via a contract of the form:</p><div class="example" style="background-color: rgb(238, 238, 255); padding: 0px 10px; font-family: Verdana, Arial, Helvetica, sans-serif; "><pre style="font-family: Courier, monospace; ">  -spec my_error(term()) -> no_return().</pre></div></div></blockquote><div><div><br></div><div>no_return() is completely the wrong thing to use and just leaving out the throw() declaration is also wrong in my eyes. How do I do this?</div><div><br></div><div>Thanks,</div><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; font-family: 'Courier New'; border-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><p style="font-family: Arial; font-size: 11px; line-height: 1.4em; margin-top: 10px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; letter-spacing: 1px; color: rgb(0, 105, 141); font-weight: bold; "><span class="Apple-style-span" style="font-weight: normal; ">Rudolph van Graan</span></p></div></div><div><br></div></div></span><br class="Apple-interchange-newline"></span><br class="Apple-interchange-newline">
</div>
<br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><p style="font-family: Arial; font-size: 11px; line-height: 1.4em; margin-top: 10px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; letter-spacing: 1px; color: rgb(0, 105, 141); font-weight: bold; "><br></p></div></div></div></div></span><br class="Apple-interchange-newline"></span><br class="Apple-interchange-newline">
</div>
<br></div></body></html>