@dzaima FYI I just split the block type (f/m/d) and immediacy into separate variables in the compiler instead of adding them up. That seems to be cleaner, so I now weakly recommend struct-of-lists, because it's what the compiler naturally produces.
'make a distinction between ⍳5 and ⍳,5 so that ⍳,5 returns 5 1-item vectors instead of 5 scalars -- this also needs , to be implemented;', for me (⍳5)≡(⍳,5)