There have been a number of comments in this thread, and some slight
variations in the idea.

I'm afraid that it all looks awkward to me, so far. I understand trying to
work out the smallest change that would allow the style, but it just feels
"bolted on" in a bad way.

I believe that if Python gets pattern matching, it should either be full
F#-ish syntax *OR* be done as a library with a mini-language (which is not
actual Python syntax)

Would it be so bad to put something like the F# syntax in tripple quotes,
or perhaps in some nested data structure, then process it with a function
call? At least as something that could live on PyPI that could try to gain
users and see how much reaction the style gets.

On Tue, Dec 31, 2019, 5:30 PM Andrew Barnert via Python-ideas <
python-ideas@python.org> wrote:

> Every so often, someone suggests that Python should have a pattern
> matching case statement like Scala, C#, Swift, Haskell, etc. Or they just
> suggest that “Python needs algebraic data types” but end up concluding that
> the biggest part Python is missing is not the types themselves, but a
> practical way to do something useful with them, which basically means
> pattern matching.
>
> Anyway, with the addition of the walrus operator and @dataclass, Python is
> actually a lot closer than it used to be. I believe with just two smallish
> syntax features, it would be possible to do almost anything you’d ever want
> in a library.
>
> The first is to extend unpacking assignment to target-or-expression lists.
> Like this:
>
>     x, 0, z = vec
>
> Just like `x, y, z = vec`, this raises a TypeError if vec isn’t Iterable,
> and a ValueError if it has more or fewer than 3 elements, and otherwise, it
> binds x and z to the first and third elements. But it doesn’t bind anything
> to the second element; instead, it checks if that element is 0, and, if
> not, raises a ValueError.
>
> The second is an “if try” statement, which tries an expression and runs
> the body if that doesn’t raise (instead of if it’s truthy), but jumps to
> the next elif/else/statement (swallowing the exception) if it does. The
> actual value of the expression is discarded, but the walrus operator takes
> care of that:
>
>     if try 0, y, z := vec:
>         # do yz plane stuff
>     elif try x, 0, z := vec:
>         # do xz plane stuff
>     elif try x, y, 0 := vec:
>         # do xy plane stuff
>     elif x, y, z := vec:
>         # do slow/imprecise/whatever 3D stuff
>     else:
>         raise TypeError(f'{vec} is not a 3-vector!')
>
> Alternatively, this could just be a try expression that can be used
> anywhere: it’s truthy if evaluating doesn’t raise, falsey if it does. But I
> don’t think it’s needed anywhere but if/elif.
>
> Anyway, neither of these features seems very useful on its own. (It should
> be obvious how to rewrite that example as something just as readable that
> just unpacks and then checks the values with normal if.)
>
> But I think the two of them together will allow a pure-library
> implementation of pattern matching syntax that reads nicely and can do
> everything most other languages do—in particular, concisely and readably
> pattern match and deconstruct dataclasses (and other types with an opt-in
> protocol or registry, but dataclasses would work out of the box the way
> Scala case classes, Swift structs, etc. do).
>
> If people think either of these features is too horrible to contemplate no
> matter what the potential benefits, I won’t bother working through the
> details.
>
> But if people do want to see the details (including some good motivating
> examples—I’ll go through tutorials for those other languages to find some
> that don’t involve recursing into cons lists and other stuff you wouldn’t
> want to do in Python…), I’ll be happy to do so, and, if it works out, turn
> this into a more detailed proposal.
>
> And obviously, if people want to bikeshed the spelling before even seeing
> what it’s good for, well, this is Python-ideas. :)
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/W64QFNZVAGU2EMHTLDXHRGJ7V7TYBR5R/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/XSKEQK2Z7O463EZ7MPYTDBES3CMFP47B/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to