Subject: Re: bug#70597: Problem in pcase-let?

From: Stefan Monnier <[email-masked]>
Date: Sun, 28 Apr 2024 13:05:26 -0400

> Let me just answer the destructuring-bind comment by Stefan (I am answering
> to his last email).  The previous ones are somewhat answered here as well.
>
> In some sense, yes.  I kind of want destructuring-bind.  It is, IMHO,
> unfortunate that ELisp does not have it and that we don't have
> cl-destructuring-bind either; lower level beast than matching, but useful.

I don't understand what you mean: `pcase-let` *is* a destructring bind,
and we also do have `cl-destructuring-bind`.

> As per the pcase-let, I still think that the name and/or its behavior
> are confusing because of expectations about how a pattern matcher
> usually works.

Yes, clearly there is a problem of users being surprised.

But AFAICT, changing the semantics is not the right answer, because the
current behavior matches(!) what is usually needed and because the other
behaviors are already well-served by `pcase` and `pcase-exhaustive`.

Maybe a better answer is to try and detect ill-conceived patterns like in:

    (pcase-let (`(foo bar ,x) (SOMETHING)) (ANYTHING))

and emit a warning suggesting to rewrite it to

    (pcase-let (`(,_ ,_ ,x) (SOMETHING)) (ANYTHING))

- Stefan