Does anyone have thoughts about non-head keywords in s-exp based lanugages? Particularly for teaching. I mean things like:
```
(case x of
[(empty) => 0]
[(cons h t) => (+ 1 (length t)])
```
or
```
(if (< x 3)
then 4
else (+ x 7))
```
I find that knowing what's a binding and knowing what's a return expression is one of the things my students struggle with in Racket/Plait/Flit.
I'm hesitant to drop S-Expressions because (1) it makes writing tooling for things like holes really easy, (2) it emphasizes the point that expressions are trees, (3) it's different syntax, and I want students to learn to see past syntax, and (4) it tends to trip up language models that can't distinguish different LISPs.
(I also don't like that Shrubbery languages use C-style `f(x)` instead of Haskell style `f x` but that's just personal preference).
Adding extra keywords like `of` and `=> ` introduces new overhead, like I have to explain that they're not arguments, they're just keywords to help make things readable.
Are there Racket #langs or macros that do similar things? Does anyone have experience with things like this?