[Python-ideas] Match statement brainstorm

Michael Selik michael.selik at gmail.com
Tue May 24 09:31:40 EDT 2016

On Tue, May 24, 2016 at 2:08 AM Greg Ewing <greg.ewing at canterbury.ac.nz>

> > On Mon, May 23, 2016 at 7:57 PM, Michael Selik <michael.selik at gmail.com>
> wrote:
> >
> >>def demo(arg):
> >>    if p, q ?= arg.x, arg.y:                        # dict structure
> >>    elif x ?= arg.x and isinstance(x, int)          # assignment + guard
> >>    elif a, b, *_ ?= arg:                           # tuple structure
> >>    elif isinstance(arg, Mapping):                  # nothing new here
> I'm unenthusiastic about this -- the above looks like
> an unreadable mess to me.

Which is unreadable: ``if/elif`` keywords or ``?=`` operator? If it's the
latter, please don't get hung up on that, as I intended that as a
placeholder for whatever operator or keyword is best. My main point is that
switch/case/matching is semantically identical to if/elif, so why use
something different?

> Some other worries:
> * It appears that this would have to work by means of
> exception-catching in the rhs, so it's really a
> disguised form of the except: expression proposal;
> is that intentional?

No. The exception-catching expression is not meant to be available in any
other context. However, exception-catching is an essential feature to
matching via destructuring. I believe it's unavoidable, though *which*
exceptions are suppressed could be made more clear.

* It could also be abused to get an assigment-in-
> expression anywhere you wanted. Such things have
> been rejected before; are we changing our mind
> on that?

No, using the assign-if-can operator would be syntax error outside of an
if/elif, the reverse of how an assign operator is a syntax error inside an

* THere would be no hope of checking for coverage
> of all cases in a static checker.

I believe you, though the logic isn't clear to me. Could you explain why?

> I feel like we've wandered a long way from the idea
> we started with, which is something to facilitate
> a Haskell-like case-analysis style of programming,
> and ended up with something much looser that tries
> to be all things to everyone.

That was not my intention. If the assign-if-can operation is only available
in an if/elif statement, I think it's exactly Haskell-like case-analysis
and nothing more. Did I miss something?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20160524/8c25e779/attachment.html>

More information about the Python-ideas mailing list