@Adám ok, so let's try to reason about this part in isolation:
InnerDfn←{a}
a←'global'
if dfns use lexical scoping, it should be possible to tell where "a" belongs, just by looking at this fragment (and possibly its surrounding pairs of "{" and "}" but there aren't any)
yet, our assumption about where "a" lives would be wrong, poisoned by a tradfn somewhere in the middle of the call chain
@ngn Correct. Dfn-calling-dfn uses lexical scoping. The scoping rule depends on the call, not on the type of the called (or calling) function in isolation.
@ngn (unrelated and unimportant, but "async" is itself implying that there's absolutely no chance that a dfn callback could ever work because no closures :) )
sometimes i wonder, is there something that prevents array languages from implementing proper lambdas with lexical scoping, and vice versa - is there something preventing lisps from adding a proper concise vocabulary of bulk operations
@dzaima even if we embrace unicode and put up with the endless stream of complaints about fonts and keyboards, the choice of symbols is still bad - some of them render poorly in default existing fonts, and some of them look too similar to common ascii chars
@dzaima i don't want to be thinking about enclosing and disclosing in bqn all the time. apl is tolerable. k relieves me completely of such distractions.
IMO user-defined functions should define monadic and dyadic usage separately, and form an ambivalent function using a "monad/dyad" built-in. Supplying a default arg for ⍺ is not bad in this way Dyad←{...} ⋄ Func←n∘Dyad:Dyad, while Dyalog's way for a more general case (checking ⎕NC'⍺') is plain ugly.