<br><div class="gmail_quote">On Tue, Jan 24, 2012 at 7:31 PM, Reynaldo Baquerizo <span dir="ltr"><<a href="mailto:reynaldomic@gmail.com">reynaldomic@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
A friend of mine asked:<br>
<br>
##<br>
If you have functions that return {ok, Result} | {error, Reason}<br>
how do you chained them? So that you have:<br>
<br>
w(x(y(z(...))))<br>
<br>
without building a staircasing. Something that would be done in Haskell<br>
with monads.<br>
##<br>
<br>
I would probably go for:<br>
<br>
x({ok, Value}) -><br>
  NewValue = <do something with Value>,<br>
  {ok, NewValue};<br>
x({error, Reason}) -><br>
  {error, Reason}.<br>
<br>
in each function<br>
<br>
which brings me other question, when do you tag return values?<br>
<br>
I tend to only use tagged return values with impure functions, were an<br>
error is more likely due to side effects.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Reynaldo<br>
<br></font></span></blockquote><div><br>You'll find that pure functions (those without side effects) will rarely return {ok, Value} tuples. You get those usually because the function you are calling is interacting with something stateful. In languages like Java you end up getting gross misuse of exceptions instead of tagged tuple results. I know what I prefer. ;-)<br>
<br>Robby<br> <br></div></div><br>