I once encountered a language[1] which had syntax for infix notation
function calls, allowing new binary operators to be introduced as simple
functions of two arguments. So:
local M=17 -- upvalue for modulus
local function addm(a,b) return (a+b)%M end -- modular addition
local n = 16
print( n /addm\ 1 ) -- 0
Not sure the specific notation of /name\ feels like it fits the tone of
Lua code, but it was a convenient way to make arbitrary data types with
an expressive grammar. I don't recall if there was a way to declare
precedence, or if it was left to right.