<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Aug 15, 2015 at 4:56 PM, Joe Armstrong <span dir="ltr"><<a href="mailto:erlang@gmail.com" target="_blank">erlang@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":1gg" class="a3s" style="overflow:hidden">Rule1: Functions which return {ok,X} | {error,W} are called may_<name><br>
<br>
Rule2: Functions which return a value or raise an exception are called<br>
must_<name><br></div></blockquote></div><br>Essentially, this is what the Janes St. Core library for OCaml does as well:</div><div class="gmail_extra"><br></div><div class="gmail_extra">val zip : 'a t * 'b t -> ('a * 'b) t option</div><div class="gmail_extra">val zip_exn : 'a t * 'b t -> ('a * 'b) t</div><div class="gmail_extra"><br></div><div class="gmail_extra">Where the exception is raised, or None returned, if the t's are of different length.</div><div class="gmail_extra"><br></div><div class="gmail_extra">I think it is a good idea. Knowing off-hand if a function has effects is always a good thing. And the caller knows immediately when reading the code that this may fail in unexpected ways if the invariants are broken. <br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">J.</div>
</div></div>