Again, this is where having a design focus helps. My focus is on those
learning to program. Learning to program is hard enough without
imposing even more rules.
Here's the thing. There's no such thing as "a" programming language.
Even one language has numerous sub-languages inside of it: the
languages of expressions, definitions, types, argument lists, etc.,
etc. Keeping the number of languages small and manageable inside one
language is therefore very important. (I'm fond of the opposite
direction too -- my dissertation went to the other extreme -- but not
in this setting.) It is also an argument for deferring types for a
little while: they're already learning 2-3 languages from the start,
so adding a fourth language -- with its own syntax, grammar,
well-formedness rules, and interaction with the other languages -- is
perhaps best after they've first gotten some facility with the others.
The other issue is error reporting: to be able to generate not only
simple errors but also have them be decipherable *and* actionable.
Saying "add spaces around binops" is easy to learn, recognize, and
implement. Learning more complicated rules is certainly possible, and
may even be easy, but every distraction takes time to recover from,
and the more mental energy a person needs to expend to recover
potentially has consequences for how long it takes to get the overall
task accomplished.
Of course, having said all this about "beginners", I don't think
things are that different for experienced programmers, either.
Therefore, I'm convinced that there is virtually no payoff in trying
the kind of syntax experiment you suggest. And this hopefully helps
people understand the kinds of design principles that drive the growth
of Pyret.
Separately, I think you may also suffer from excessive respect for our
Lisp antecedents. There's a reason we gave this paper the subtitle we
did:
http://cs.brown.edu/~sk/Publications/Papers/Published/ffkf-mred/
It's to say we are aware of what Lispers were trying to accomplish,
but we also believe these things should be done in certain ways (e.g.,
that respect abstraction boundaries).
Shriram