Operators and their binding powersHere is a list of all prefix and infix operators, in order of increasing binding power. Operators given on the same line are of the same binding power. Prefix operators are identified as such in the comments - all others are infix. operator comments : ++ -- right associative \/ associative & associative ~ prefix > >= = ~= <= < continued relations allowed, eg 0div modleft associative ^ right associative . associative # prefix ! left associative $identifier $IDENTIFIER right associative Brief explanation of each operator: : prefix an element to a list, type *->[*]->[*] ++ -- list concatenation, list subtraction, both of type [*]->[*]->[*] A formal definition of list subtraction is given below. \/ & logical `or', `and', both of type bool->bool->bool ~ logical negation, type bool->bool > >= = ~= <= < comparison operators, all of type *->*->bool Note that there is an ordering defined on every (non-function) type. In the case of numbers, characters and strings the order is as you would expect, on other types it as an arbitrary but reproducible ordering. Equality on structured data is a test for isomorphism. (i.e. in LISP terms it is "EQUAL" not "EQ"). It is an error to test functions for equality or order. + - plus, minus, type num->num->num - unary minus, type num->num Note that in Miranda unary minus binds less tightly than the multiplication and division operators. This is the usual algebraic convention, but is different from PASCAL. * /divmodtimes, divide, integer divide, integer remainder, all of type num->num->num `/' can be applied to integers or fractional numbers, and always gives a fractional result, so eg 6/2 is 3.0divandmodcan only be applied to integers and give integer results, eg 7 div 2 is 3, 7 mod 2 is 1.divandmodobey the following laws, for a b any integers with b ~= 0 (i) b * (adivb) + amodb = a (ii) if b>0 then 0 <= amodb < b if b<0 then b < amodb <= 0 ^ `to the power of', type num->num->num . function composition, type (**->***)->(*->**)->*->*** # length of list, type [*]->num ! list subscripting, type [*]->num->* note that the first element of a non-empty list x is x!0 and the last element is x!(#x-1) $identifier $IDENTIFIER do-it-yourself infix, `a $f b' is equivalent in all contexts to `f a b'. Also works for constructors of two or more arguments.Note on list subtractionHere is a formal definition of the `--' operator in Miranda. It is defined using an auxiliary function `remove' which removes the first occurrence (if any) of a given item from a list. x -- [] = x x -- (b:y) = (remove b x) -- y remove b [] = [] remove b (a:x) = x, if a=b = a:remove b x, otherwise