New EEP draft: Pinning operator ^ in patterns

Anthony Ramine n.oxyde@REDACTED
Sat Dec 26 14:16:02 CET 2020


That's already a thing in Erlang and AFAIK that never caused issues for anyone.

X = 2.
F = fun (<<_:X/binary>>, X) -> oh end.
F(<<0, 0>>, 3).

> Le 25 déc. 2020 à 23:41, Richard O'Keefe <raoknz@REDACTED> a écrit :
> 
> "This fills a much-needed gap."
> 
> Erlang functions are as a rule small enough that you
> shouldn't ever shadow a variable.  One of the worst
> features of Erlang is that you can write
>    foo(X) -> fun (X) -> fun (X) -> 1 end end.
> and have three different variables all called X, and
> one of the good things about erlc is that it tells you.
> foo.erl:3: Warning: variable 'X' is unused
> foo.erl:3: Warning: variable 'X' is unused
> foo.erl:3: Warning: variable 'X' shadowed in 'fun'
> foo.erl:3: Warning: variable 'X' shadowed in 'fun'
> 
> The very last thing we want is a notation that lets
> us have two different variables with the same name
> in a single pattern.
> 
> 
> On Fri, 25 Dec 2020 at 09:10, Richard Carlsson <carlsson.richard@REDACTED> wrote:
> The ^ operator allows you to annotate already-bound pattern variables as ^X, like in Elixir. This is less error prone when code is being refactored and moved around so that variables previously new in a pattern may become bound, or vice versa, and makes it easier for the reader to see the intent of the code.
> 
> See also https://github.com/erlang/otp/pull/2951
> 
> Ho ho ho,
> 
>         /Richard & the good folks at WhatsApp



More information about the erlang-questions mailing list