One might think it obvious that an ordinary function that takes its first argument literally needs to "win" taking its argument to the right... even if an infix function after it gets its left argument literally.
You might think this because HELP needs to work:
>> help ->
USAGE:
@(spec) -> @(body)
DESCRIPTION:
Makes an anonymous function that doesn't copy its body, can unpack args...
That makes it seem HELP taking its right hand side literally has to win...therefore you couldn't use HELP as the name of a variable to make arrow functions, e.g.
weird-increment: help -> [help + 1] ; same as `lambda [help] [help + 1]`
If HELP always won looking right, that would not be legal.
But Left-Taking-Right-Literally Can't Get "First Dibs"
Consider the following from the evaluator's point of view:
(print "message", $lib)/help ->
Let's pretend for a moment that the evaluator gives the left hand side the first shot. In that world, if the left is looked up and doesn't take the right literally, then the right hand side gets second dibs...and is checked if it takes its left side literally.
But notice that to get the knowledge of if left-quotes-right or not, you have to evaluate that path. That can do processing which has costs you might not want... and groups can have side-effects (like the printing of the message). But since infix dispatches from words only, it doesn't have that problem; it can be checked "cheaply" with no side-effects, making what the right hand side wants of the left a good fit for the first thing to check...falling through to the expensive operation with side-effects that you then know wins.
So that's why I've been letting right quoting over left win. But you might ask: how can HELP work without making you say help '-> (which might lead down the road of consistency and making you type help 'append) ? Because there's been a rule: "Right operators that are left literal get priority, BUT become inert if they have nothing following them."
help -> ; gives you the help for lambda
help -> [print ["argument is" help]] ; gives you an arity-1 function
Weird, but it seemed to work well enough.
Reviewing it now, it's somewhat limiting. It means you can't have postfix operations that take their left hand sides literally taking non-inert items on their left. But the alternative would mean never allowing left-literal paths, or having dodgy properties when you do. Hm.
Can It Be Narrower?
Might only "escapable literal" @(left) parameters have this loophole, with full (@literal) operators being presumed rare enough to break HELP...and still run at end?
>> ?: infixed func [@left] [print ["got" mold left]]
>> _ ?
got _
>> help ?
got help
>> help ($?) ; HELP is `@literal` but evaluates groups
? is an ACTION!
...help text here...
>> help $? ; HELP would allow this too
? is an ACTION! ; and ACTION! now carries labels, so it can know the "?"
...help text here...
To me, this seems to give a number of options to someone who wants to get HELP on a left literal infix operation. Enough options to not make left-quoting infix of words and paths impossible.
And how bad would this be, really? If we narrowed it down to where the only operators that require escaping to get HELP are those that are genuinely postfix hard literal with no arguments... that's a pretty small set. To date, we have ZERO such operators in the box, they only exist in tests.
This is important!
Having these things work out is the point, because this is what the unique offering is. These issues all lock together on foundational questions e.g. those pointed out by "speaking with tics".
When left-literal infix operators can subvert literalism from the right, that means when you say for-each x you can't be sure that X won't act on the FOR-EACH. But we can see that as different from the situation type of is in...since OF gets the first shot.
Does that suggest the "out-of-the-box" constructs always have you decorate things you want literally on the right? It doesn't seem we'd want to bear the consequences of that on HELP...
>> help append
** Script Error: append is missing its series argument
>> help $append
; this would work...
Just have to keep everything all lined up.