New EEP draft: Pinning operator ^ in patterns

Richard O'Keefe raoknz@REDACTED
Mon Dec 28 00:39:23 CET 2020


(a) Yes that kind of thing DOES cause headaches for me.
    There is no excuse for writing code like that and
    never has been.
(b) After correcting two of the full stops and wrapping
    these lines in a function and a -module,
f.erl:6: Warning: variable 'X' is unused
f.erl:6: Warning: variable 'X' shadowed in 'fun'

The very last thing we need is a notation that makes it
easier to write pointlessly bad code.

If the proposed notation solved some other practical
problem, we could live with the downsides.  But while
the Erlang shoes have given me many a blister over the
years, this EEP would have done nothing to help.

One thing I *would* like is an analogue of -Werror.


On Sun, 27 Dec 2020 at 02:16, Anthony Ramine <n.oxyde@REDACTED> wrote:

> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/eeps/attachments/20201228/0e709d3a/attachment.htm>


More information about the eeps mailing list