Jim Jewett said:
def f(arg) [x] : # wrap f in x def f(arg) : [x] # start f's def with a list of x
These are all well-defined for parsing, but I don't think the distinctions are obvious to a human who doesn't already know the syntax.
This point has come up a couple times, and I don't think it's really a valid complaint, because...
You won't get confused when reading it:
No one will ever write the second one (f's def consists of a single list), because it's not a useful function. Has anyone ever actually seen a function like this? So when you're reading the code, you're very unlikely to get confused. This is especially true because there will be an indented body under the f(arg), so the [x] can't possibly be part of the body.
If you write the wrong thing, it's easy to detect:
If you accidentally put the [x] after the colon, then you'll get a parse error, since you'll also have a body. The current parse error might be a little cryptic (just a syntax error at the first line of the body), but if necessary the parser could be special- cased to give a more specific error there.
Some of the other arguments against the new syntax seem reasonable to me, and I'm not yet decided whether I'm in favor of the syntax or not. But I just wanted to point out that I don't find this particular complaint against it very compelling.