How to handle nested case

Igor Clark igor.clark@REDACTED
Mon Sep 20 00:56:29 CEST 2021


Just read it all through and totally agree, this is really very elegant. Lovely to see. If all goes well, is there a rough guideline for how long it would take for this extension to appear in mainline releases? (If that’s the plan!)

Thanks!

> On 19 Sep 2021, at 16:35, Gian Lorenzo Meocci <glmeocci@REDACTED> wrote:
> 
> 
> the proposal and the implementation are pieces of art!
> Thanks for your work.
> 
>> On Sun, 19 Sept 2021 at 17:02, Gian Lorenzo Meocci <glmeocci@REDACTED> wrote:
>> Thanks a lot for the link!
>> 
>>> On Sun, 19 Sept 2021 at 16:40, Paulo F. Oliveira <paulo.ferraz.oliveira@REDACTED> wrote:
>>> Hi, Gian.
>>> 
>>> You might be interested in reading [1], first shown to the Erlang world in [2] (there's more info. in the archives, if you search).
>>> 
>>> FYI, it is being hacked away, at this very moment, in SpawnFest 2021: https://github.com/spawnfest/eep49ers.
>>> 
>>> Cheers.
>>> 
>>> - Paulo F. Oliveira
>>> 
>>> [1] https://github.com/erlang/eep/blob/master/eeps/eep-0049.md
>>> [2] http://erlang.org/pipermail/eeps/2018-September/000554.html
>>> 
>>>> On Sun, 19 Sept 2021 at 14:37, Gian Lorenzo Meocci <glmeocci@REDACTED> wrote:
>>>> I think that there isn't a generic solution for this problem. It’s time to introduce the 'with' operator in Erlang ��
>>>> 
>>>> Il Dom 19 Set 2021, 09:06 Attila Rajmund Nohl <attila.r.nohl@REDACTED> ha scritto:
>>>>> Hello!
>>>>> 
>>>>> One way (I haven't actually tried to compile this, but hopefully you
>>>>> get the idea):
>>>>> 
>>>>> get_nas_from_conf() ->
>>>>>   try
>>>>>     {ok, Server} = get_radius_host(),
>>>>>     {ok, Port} = get_radius_port(),
>>>>>     {ok, Secret} = get_radius_secret(),
>>>>>     {Server, Port, Secret};
>>>>>   catch
>>>>>     error:{badmatch, E} ->
>>>>>       E
>>>>> end.
>>>>> 
>>>>> Of course, if the badmatch comes from the get_* functions, this
>>>>> construct might catch that too, but you might be able to  ensure this
>>>>> doesn't happen.
>>>>> 
>>>>> Gian Lorenzo Meocci <glmeocci@REDACTED> ezt írta (időpont: 2021.
>>>>> szept. 18., Szo, 22:50):
>>>>> >
>>>>> > Hi,
>>>>> > I have a function like this:
>>>>> >
>>>>> > get_nas_from_conf() ->
>>>>> > case get_radius_host() of
>>>>> > {ok, Server} ->
>>>>> > case get_radius_port() of
>>>>> > {ok, Port} ->
>>>>> > case get_radius_secret() of
>>>>> > {ok, Secret} ->
>>>>> > {Server, Port, Secret};
>>>>> > E -> E
>>>>> > end;
>>>>> > E ->
>>>>> > E
>>>>> > end;
>>>>> > E ->
>>>>> > E
>>>>> > end.
>>>>> >
>>>>> > Which is the best way to write this kind of function?
>>>>> >
>>>>> > I'd like to have a with operator like in Elixir, to rewrite my function in this way:
>>>>> >
>>>>> > get_nas_from_conf() ->
>>>>> > with {ok, Server} <- get_radius_host(),
>>>>> > {ok, Port} = get_radius_port(),
>>>>> > {ok, Secret} = get_radius_secret() ->
>>>>> > {Server, Port, Secret};
>>>>> > catch
>>>>> > {error, _Reason} = E ->
>>>>> > E
>>>>> > end.
>>>>> >
>>>>> > Any suggestion?
>>>>> >
>>>>> > --
>>>>> > GL
>>>>> > https://www.meocci.it
>> 
>> 
>> -- 
>> GL
>> https://www.meocci.it
> 
> 
> -- 
> GL
> https://www.meocci.it
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20210919/9467a8bb/attachment.htm>


More information about the erlang-questions mailing list