New EEP draft: Pinning operator ^ in patterns

Richard O'Keefe raoknz@REDACTED
Fri Dec 25 23:41:35 CET 2020

"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>

> 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
> Ho ho ho,
>         /Richard & the good folks at WhatsApp
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the erlang-questions mailing list