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