||In the below source text, I expose I6's "parse" array variable to I7. It's an array of structs, basically. I've defined a "field" of a struct as "a relation of number to K", where K is the type of the element. So I've defined the array itself as "a relation of index to (a relation of number to K)" to put it succinctly. But I hit one or two problems with it.
First problem: I define the gettor function so that the kind variable K, set by the field's type, is re-used in the array type. Except I get spurious I7 compilation errors about the return value no longer being say-able. If I comment-out the K and leave "word value" in its place, everything compiles and works beautifully. In the source, see the to-decide function that has K commented out.
Second problem: since the Z-machine uses bytes as indexes (the -> operator), I changed the field from "number" to "arithmetic value" where needed. But the array's type doesn't like it, giving the same un-say-able values error. If I comment out [arithmetic] and just use "value", it works again. Huh? How can the super-specific "number" and super-general "value" both work but not the "arithmetic value" in-between? (In the source, see the definition for (-parse-) which has arithmetic commented out.)
[The below source text compiles and works as-is for both VMs. Uncommenting arithmethic, or swapping the commented K with word value, exposes the bug(s).]