I've been thinking about this exact thing recently. I suppose it's because ⍸ doesn't produce scalars or unsorted vectors?
It'd certainly be more convenient if ⍸⍣¯1 was more lenient - I've found myself writing ⍸⍣¯1{⍵[⍋⍵]} a couple of times. But maybe that'd make it less correct theoretically?
@RubenVerg @rabbitgrowth Right. (F⍣¯1)r asks "What argument y can be given to F such that it yields the result r?" Anyway, often, what you really want is (⍴y)↑(⍸⍣¯1)r on a Boolean argument, and then you can just write (⍳⍴y)∊r. And if you really want the result to have variable length: (⍳⌈/r)∊r. For this reason, I've been considering monadic ⍷ as "Whence", defined as {⍸⍣¯1{⍵[⍋⍵]},⍵}
Maybe monadic = could work for type. I currently have it in mind for a Rank function (≢⍴) but that function is pretty trivial, though = is nice considering Depth being ≡.
@RubenVerg Yeah, ⊤ is really not related other than resembling a T for Type, and I'd rather use monadic ⊤ for 2⊥⍣¯1
Binary is much more common, and it was indeed the meaning of monadic ⊥ that Iverson originally had. I don't know why it wasn't carried over to APL\360.
Right, being trivially expressable in terms of other primitives is not a good criteria for exclusion. E.g. who needs + when we have -∘-…
@RubenVerg It currently NONCE ERRORs on all objects except instances of classes that have a niladic constructor. I was thinking that namespaces and classes could be their own types.