Now it's my turn to comment back after awhile, ha. Thanks for the replies!
I don't have much to add. Your explanation of the type system, such as it is, makes more sense now. Could sit here splitting hairs all day over whether to call it "weakly typed" or "untyped" or whatever other term, but it makes sense at the end of the day when you put it in terms of the (val 0xXX 0xXX) stuff.
Am I right in basically reading that like (val [value] [tag])? And then, the idea is that all operators (not just +) operate on the "value" part of these "value x tag" tuples? Destructive operators preserve the tag, because they're also just operating on the "value" part, but of the same structure. Whereas nondestructive operators need to create a separate (val ...) structure, and don't set the tag. So would
{'b' 'a' +}
evaluate to 0xc3, since that's 0x61 + 0x62 and the type tag is unpreserved, despite being (presumably) the same (since they're both strings)?
Sorry to ask all these questions that would probably be better answered by me playing with the language myself or looking at the docs. It's an easy---but surely annoying---way to make conversation. Feel free to "RTFM" me. :)
P.S.:
"cloud" computing (scare-quotes because cloud is a particularly obtuse buzzword, IMO).