[eeps] EEP 049: Value-Based Error Handling Mechanisms
Bryan Paxton
starbelly@REDACTED
Tue Oct 13 17:24:23 CEST 2020
100% +1 +1 +1
--
Bryan
On 10/13/20 8:42 AM, Fred Hebert wrote:
>
> On Fri, Dec 7, 2018 at 6:28 AM Kenneth Lundin <kenneth@REDACTED
> <mailto:kenneth@REDACTED>> wrote:
>
>
> EEP-0049 Value-based Error handling mechanisms
>
>
> * We don't like a language construct which is hard coded to
> support ok,{ok,Result}, {error,Reason}.
> * the use of underscore _ <~ to mean a match with ok is not a
> hit, it will make programs harder to read
> * We are against the introduction of /unwrapexprs/ that cannot
> be used everywhere where expressions are allowed.
> * The /unwrapexpr/ changes the scoping rules and can not be used
> in nested expressions and not outside begin ... end.
>
> It is perfectly possible to use throw and try catch to replace or
> simplify deeply-nested case ... end expressions in the same way as
> the proposed language extension does.
>
>
> ...
>
>
> Summary
>
> * We say no to the proposed language extensions. We don't think
> they are general enough and we also see some problems with them.
> * The same effect can be achieved safely with the current
> language using throw, try...catch.
> * Encouraging |ok, {ok,Result}, {error,Reason}| as results from
> functions can be done in other ways, for example through
> library functions. These values should not be special to the
> /language/.
> * We also want to thank the author for a very well thought
> through and well documented proposal which has triggered us to
> think about possible solutions in this area. We really
> appreciate the effort.
>
> /Kenneth, Erlang/OTP Ericsson
>
> I'd like to come back and revisit this.
>
> I won't re-expand on my disdain for try...catch based control-flow for
> common cases, but I was wondering what would the opinion of the OTP
> team be if I were to re-work the proposal towards a less /opinionated/
> approach to this control flow, something possibly more in line with
> Elixir's with.
>
> Currently the simplest way to transform this proposal is probably to
> allow the pattern on the left-hand-side of <~ to be any pattern, and
> only escape the begin...end construct as a short-circuit return:
>
> begin
> {ok, X} = exp(), % hard crash if it doesn't match
> {ok, X} <~ exp(), % if it fails, begin...end returns the value of
> the non-matching term
> ...
> end
>
> This gets rid of the _ <~ rhs() magic syntax, drops prescriptiveness
> of ok | {ok, T} | {error, R} returns, but maintains high-level control
> flow that doesn't risk transforming non-local returns into values
> (which forces rewriting unrelated code to work nicely with high-level
> conditional flows and clashes with value-based error handling) and
> establishing a sort of conditional pipeline. It does lose some of the
> safety mentioned in the original proposal, but we can't maintain that
> safety without normalizing acceptable good or error values, which the
> OTP team has mentioned not wanting to do at the language level.
>
> Of course the logical expansion of it is going for:
>
> case
> begin
> {ok, X} = exp(), % hard crash if it doesn't match
> {ok, Y} <~ exp(), % if it fails, begin...end returns the value of
> the non-matching term
> ...
> end
> of
> {ok, Good} -> ...;
> {error, Reason} -> ...;
> end
>
> which brings in whether a proposal rework that goes for something
> closer to Elixir's with
> <https://www.openmymind.net/Elixirs-With-Statement/> would be interesting.
>
> Let me know if there's interest and I can rework things. I keep
> feeling the pain of complex validation flows time and time again
> there, particularly whenever there is one single good path and many
> bad paths possible for each validation step.
>
>
> _______________________________________________
> eeps mailing list
> eeps@REDACTED
> http://erlang.org/mailman/listinfo/eeps
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/eeps/attachments/20201013/2d1abbaf/attachment-0001.htm>
More information about the eeps
mailing list