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.
Operators can be local or exported, depending on the definition (the default is local). There are also a number of predefined global operators, see the User Manual appendix for a complete list.
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.
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). % see how it is parsed +(a, *(b, c)) yes. [a]: op(100, xfy, +). % define a local infix yes. [a]: display(a+b*c). % parsed differently now! *(+(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).