What use are `case` bindings? (was: What use [...] sneak[...])

"Michael P." <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <20210818225100.1ae8d956@aesop>
On Wed, 18 Aug 2021 13:17:44 +0100
Karl Velicka <[email protected]> wrote:

> Thanks,

Thank _you_!
I have evidently but not obviously edited it to death.
I tried to be concise, but the info in the text deleted
was still in my mind and ... death edit.

Hope I didn't delete too quickly ... 8-(

All the fine explanations ...
"lost in time, like -- tears in the rain."

---------------

Being '(let)-y' is to mean that it all has its own scope,
like a `fun` has, from its recursion name,
through the pattern list of each clause,
and any guard sequences,
to the expression sequence in each clause.

Making `case` behave '(let)-y' would prevent it
from creating any bindings that exist beyond its `end`
or could not-match with a binding from before `case`.

The "legacy wall" means 'Cannot be changed,
because everyone has used it everywhere.'

F...ine! There is no "slot-machine" ...

Did `case` once behave like this?
put a variable getting bound in a pattern
outside the `case` only if the
variable occurred in the pattern of each clause?

I cannot find mention of such now.
The notes were a bit old;
trying to follow some netiquette
I try to have a thought of my own
before stealing other people's time with postings.

----------------

The only thing remaining a bit "sneaky",
is that I cannot find now any mention of
the bindings `case` can create; bindings
that live on beyond `end` and can collide
with non-matching bindings from before `case`.

So the question can be altered into:

What use are `case` bindings?

    "Strictly speaking, `case` is unnecessary.
     This is how filter would have been defined
     using pure pattern matching: [module functions]"

    -- Sec. 4.8, p. 68, _Programming_Erlang_Second_Edition_,
       by Joe Armstrong, edited by S. D. Pfalzer

What is unpure about `case` pattern matching?

When `case` is explained, there is little binding at all.
And with it looking like a function and

    "The return value of Body is
     the return value of the case expression."

    -- https://erlang.org/doc/reference_manual/expressions.html

people, like me, might think it was as '(let)-y' as a `fun` --
and use it that way, raising the last of the orginal questions:

What would one lose when "unpure" `case` scared
one into some

    Switch = ...,
    Result = (fun Case(...) when ... -> ...;
                  Case(...) when ... -> ...
              end)(Switch),
?

~M

--

The clever man acquires the knowledge of other clever men;
the sage can also learn from the fool.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.