The operator is defined to be local to the current module only.
Precedence is an integer in the range 0 to 1200.
Associativity must be one of the following atoms:
---------------------------- xfx infix xfy infix yfx infix fx prefix fy prefix xf postfix yf postfixx represents an argument whose precedence must be lower than that of the operator. y represents an argument whose precedence must be lower or equal to that of the operator.
Prefix, infix and postfix operators are independent of each other and may coexist. See the manual chapter on syntax about how ambiguities are resolved in this case.
A precedence of 0 has a special meaning. It erases a local operator definition and/or hides a global operator of the same name and associativity class. A local operator definition can be completely removed with abolish_op/2. In this case, a global operator (if any) of the same name becomes visible again.
Success: [eclipse]: module(a). [a]: current_op(X, Y, +). % there are two global operators X = 500 Y = yfx More? (;) X = 500 Y = fx More? (;) no (more) solution. [a]: display(a+b*c). +(a, *(b, c)) yes. [a]: op(100, xfy, +). % define a local infix yes. [a]: display(a+b*c). *(+(a, b), c) yes. [a]: abolish_op(+, xfy). % remove the local infix yes. [a]: display(a+b*c). +(a, *(b, c)) yes. [a]: op(0, xfy, +). % just hide the global infix yes. [a]: current_op(X, Y, +). X = 500 Y = fx More? (;) no (more) solution. Error: op(X, fx, aaa). (Error 4). op(a, fx, aaa). (Error 5). op(100, xfx, 1). (Error 5). op(100, abc, fred). (Error 6). op(100, xfx, aaa), op(100,xf,aaa). (Error 43).