Better error messages: Yes, I agree. I'll work on this next after my current branch is done.
I'm using Unicode because ASCII doesn't offer enough options to properly delineate the types we need. The traditional overloading of < and > for templates is quite probelamtic in parsing, and can lead to ambiguities in the language. C++ has suffered from that, and has some weird workarounds. I'm preferring to make this clean, even if it requires Unicode. Unicode sequences will have ascii defaults, for parameters this is `<:` and `:>`, such as `array<: integer :>`.
There is no fallback for ⁑ as it's meant only for internal symbols. It's intentionally meant to look like something you shouldn't use in user names. Only people working on the language will need it (that's the idea at least).
I might actually remove the `do` syntax. You can already use `then` and `else` syntax which is becoming the cleare alternative:
cond then {
true-code
} else {
false-code
}
I dropped the `if` to combine this with the short-form, such as `check_cond else return 1` or `is_negative then a *= -1`
Array inidices don't use [] as I reserved those for tuples: which are much more frequently used and need a good paired syntax. For ambiguity it's important tuples don't share the same marker as blocks {}'s. The next most common index syntax is `#` which is used in HTML fragments. I also like that it doens't have a pair, since subscription is not related to a set in any way. That is, it shouldn't look like a value list (), tuple [], or block {} since it's in no way semantically related to such paired operations.