Where I really want to focus here is on making this an exemplary codebase for how someone would build a dialect.
So that means tackling the details of things like error delivery...and the ever-looming cloud of debugging.
But also, what role binding plays. Here I'm breaking up the dialect's behavior into a map of keywords which is supplied to the dialect engine...that maps those keywords into units that the dialect understands (combinators). Is this concept typical? Is it how BITWISE should work?
In terms of adding features, I really want to see it work with streaming. We need some test examples, like a PORT! that just sits there generating random IP addresses...and then run a UPARSE on that which prints them out...where the amount of memory used stabilizes and does not grow without bound.
So there's a ton to worry over just by making UPARSE a good example without pushing too far into the imaginary...