In Pip, I have a Scalar class, which stores data internally as a string. When it's used in math operations, I cast the string to either int or float, depending on the presence of a decimal point. If int(result) == result, I cast it back to an int, and finally (whether int or float) take the str of it. We could probably skip the string part in Charcoal.
This is probably a really wacky mnemonic that only makes sense to me, but: if reflect-transform without overlap is M, then reflect-transform with overlap could be N. Because:
Stop me if you've already implemented some of these, but 1) lists, 2) dictionaries, 3) regex, 4) reading from the canvas (incl various types of neighborhoods), 5) spawn/kill and/or functions
@ASCII-only Now I'm trying to remember what the idea even was. :P Having multiple cursors running at once? Something to do with simulating function call semantics?
@ASCII-only I'm sure there are more we could add. There always are.