Author here if you have any questions. The main reason to write this document is people used to APL wondering why BQN leaves out certain primitives (answer: I don't think they're really primitives), but probably more HNers would wonder why it has so many that ASCII isn't even fit to keep them all (the full list is at <a href="https://mlochbaum.github.io/BQN/doc/primitive.html" rel="nofollow">https://mlochbaum.github.io/BQN/doc/primitive.html</a>). Just as well; hopefully I've addressed both concerns!
Along vaguely related lines is <a href="https://gist.github.com/chrispsn/b1020918a83a28ab8b4442d8aff8d1b4" rel="nofollow">https://gist.github.com/chrispsn/b1020918a83a28ab8b4442d8aff...</a>
When I write programming languages, I usually define primitives as "any value without children". Strings, numbers, booleans, are primitives. Collections and records are not.<p>Some edge cases: literal ranges would be primitives, because their ast is represented (in Haskell) as "Range Int Int". Ranges which take values wouldn't be primitives, because their ast is represented as "Range expr expr"