Answers to the above questions per #tcl on libera:
- Type compatibility in tcl can be tested with [string is …]. "Actual" (interpreter level) type is apparently not exposed. https://www.tcl-lang.org/man/tcl8.6/TclCmd/string.htm#M10
- Strings can be concatenated with [string cat …].
- Arrays are "weird"; they live in a single scope and can't be exported or passed to a function except by breaking things with "upvar". Additionally, dicts are ordered. "arrays" feel like an old version of "dicts" and I think I intend to avoid them