Why not change the sticking character instead of being "_" it could be something like '#' or '$' ?
We have already discussed having "##" for builtin constructs. It might make it even more consistent to use it for everything the compiler uses under the hood.
##; ##+ ##let_in ##| ##cons ##inductive
Re-using existing special syntax would be good, indeed. But I see a few problems with this solution:
- normal user programs will occasionally want to manipulate and define infix operators, so it shouldn't be too ugly. - programs will also want to define brand new infix operators (e.g. _++_ for concatenation), and since these wouldn't be built-in, using ## would be odd.
In the mean time, I thought about taking inspiration, again, from Lisp. To write "odd" symbols, Common Lisp's reader supports the syntax |...|, so we could do something similar (tho not using |...| since we need | for other purposes). In Emacs Lisp, |...| is not supported, but instead you can -escape any char, so in order to write the symbol composed of 3 spaces (i.e. | |) you can write \ \ \ .
So we could ask the user to write ; to get a semi-colon which is not a single-char token. IOW the user would have to write _;_ instead of the current _;_.
We already support -escaping inside strings in the (pre)lexer, so it would be fairly natural to extend this escaping to also work in symbols.
Stefan