[m-users.] Mercury operators explained

Paul Bone paul at bone.id.au
Wed Feb 19 09:45:14 AEDT 2014

On Tue, Feb 18, 2014 at 10:11:35PM +0000, Piotr Trojanek wrote:
> Dear Mercury experts,
> please excuse me for a naive question, but where can I find
> documentation of the Mercury operators?
> I was translating my code from SWI-Prolog and found that there is no
> "=\=" operator in Mercury. There are many other built-in operators
> listed in the Mercury Reference Manual, but they are not explained.

There is no =\= module in Mercury.  Arithmetic expressions are evaluated
immediately, they do not create terms so you do not need "is" "=:=" or "=\="
and so-on.  The normal unification and comparison operators should be used.

Operators are listed in the reference manual and explained in the library
documentation.  Operators such as "+" (like other predicates) can have
definitions in different modules, for example the int module defines + as
taking two "int"s and returning an "int", whereas the float module defines
+ as taking two "float"s and returning a "float".  If your program imports
both modules the compiler uses the types of variables in your program to
work out which definition of + to use.

Library reference:

Some comparison operators are defined here:

Goal operators such as conjunction, disjunction implication are defined in
the reference manual:

Some symbols, although I wouldn't call them operators others may disagree,
are used in declarations, for example the ---> used in type definitions are
described throughout the reference manual.

Also note that some symbols are used as both goal operators and symbols in
declarations.  For example implication <= is also used to describe typeclass

I hope this helps.

Paul Bone

More information about the users mailing list