New EEP draft: Pinning operator ^ in patterns

zxq9 zxq9@REDACTED
Thu Jan 21 17:27:42 CET 2021


On 2021/01/22 1:11, Kostis Sagonas wrote:
> On 1/21/21 3:41 PM, Richard Carlsson wrote:
>> Some weird code becomes obvious when annotated.
>>
>> What does this line do?
>>
>>      _ = [M = M:module_info(module) || M <- Needed],
>>
>> Oh, it's a multi-assertion!
>>
>>      _ = [^M = M:module_info(module) || M <- Needed],
> 
> I disagree.
> 
> This is _exactly_ the kind of code where you do *not* want such an 
> annotation.  You want to rewrite this to something like:
> 
>    true = lists:all(fun (M) -> M =:= M:module_info(module) end, Needed),
> 
> No matching is required here.
> 
> Kostis

+100

And further on this note, the entire example illustrates quite clearly 
why Erlangers don't want this.

"But I've been doing Elixir so much lately and..."

Yeah, that's Elixir. Stay over there. The paradigms do not converge.

How much harder does this have to be stated?

-Craig


More information about the erlang-questions mailing list