<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.31
     from reference_manual.texi_pp on 8 July 2003 -->

<TITLE>The Mercury Language Reference Manual - Table of Contents</TITLE>
</HEAD>
<BODY>
<H1>The Mercury Language Reference Manual</H1>
<H3>Version ws-ceres</H3>
<ADDRESS>Fergus Henderson</ADDRESS>
<ADDRESS>Thomas Conway</ADDRESS>
<ADDRESS>Zoltan Somogyi</ADDRESS>
<ADDRESS>David Jeffery</ADDRESS>
<ADDRESS>Peter Schachte</ADDRESS>
<ADDRESS>Simon Taylor</ADDRESS>
<ADDRESS>Chris Speirs</ADDRESS>
<ADDRESS>Tyson Dowd</ADDRESS>
<ADDRESS>Ralph Becket</ADDRESS>
<P>
<UL>
<LI><A NAME="SEC1" HREF="reference_manual.html#SEC1">Introduction</A>
<LI><A NAME="SEC2" HREF="reference_manual.html#SEC2">Syntax</A>
<UL>
<LI><A NAME="SEC3" HREF="reference_manual.html#SEC3">Syntax overview</A>
<LI><A NAME="SEC4" HREF="reference_manual.html#SEC4">Tokens</A>
<LI><A NAME="SEC5" HREF="reference_manual.html#SEC5">Terms</A>
<LI><A NAME="SEC6" HREF="reference_manual.html#SEC6">Builtin Operators</A>
<LI><A NAME="SEC7" HREF="reference_manual.html#SEC7">Items</A>
<LI><A NAME="SEC8" HREF="reference_manual.html#SEC8">Declarations</A>
<LI><A NAME="SEC9" HREF="reference_manual.html#SEC9">Facts</A>
<LI><A NAME="SEC10" HREF="reference_manual.html#SEC10">Rules</A>
<LI><A NAME="SEC11" HREF="reference_manual.html#SEC11">Goals</A>
<LI><A NAME="SEC12" HREF="reference_manual.html#SEC12">State variables</A>
<LI><A NAME="SEC13" HREF="reference_manual.html#SEC13">DCG-rules</A>
<LI><A NAME="SEC14" HREF="reference_manual.html#SEC14">DCG-goals</A>
<LI><A NAME="SEC15" HREF="reference_manual.html#SEC15">Data-terms</A>
<UL>
<LI><A NAME="SEC16" HREF="reference_manual.html#SEC16">Data-functors</A>
<LI><A NAME="SEC17" HREF="reference_manual.html#SEC17">Record syntax</A>
<LI><A NAME="SEC18" HREF="reference_manual.html#SEC18">Unification expressions</A>
<LI><A NAME="SEC19" HREF="reference_manual.html#SEC19">Conditional expressions</A>
<LI><A NAME="SEC20" HREF="reference_manual.html#SEC20">Lambda expressions</A>
<LI><A NAME="SEC21" HREF="reference_manual.html#SEC21">Higher-order function applications</A>
<LI><A NAME="SEC22" HREF="reference_manual.html#SEC22">Explicit type qualification</A>
</UL>
<LI><A NAME="SEC23" HREF="reference_manual.html#SEC23">Variable scoping</A>
<LI><A NAME="SEC24" HREF="reference_manual.html#SEC24">Implicit quantification</A>
<LI><A NAME="SEC25" HREF="reference_manual.html#SEC25">Elimination of double negation</A>
</UL>
<LI><A NAME="SEC26" HREF="reference_manual.html#SEC26">Types</A>
<UL>
<LI><A NAME="SEC27" HREF="reference_manual.html#SEC27">Builtin types</A>
<LI><A NAME="SEC28" HREF="reference_manual.html#SEC28">User-defined types</A>
<UL>
<LI><A NAME="SEC29" HREF="reference_manual.html#SEC29">Discriminated unions</A>
<LI><A NAME="SEC30" HREF="reference_manual.html#SEC30">Equivalence types</A>
<LI><A NAME="SEC31" HREF="reference_manual.html#SEC31">Abstract types</A>
</UL>
<LI><A NAME="SEC32" HREF="reference_manual.html#SEC32">Predicate and function type declarations</A>
<LI><A NAME="SEC33" HREF="reference_manual.html#SEC33">Field access functions</A>
<UL>
<LI><A NAME="SEC34" HREF="reference_manual.html#SEC34">Field selection</A>
<LI><A NAME="SEC35" HREF="reference_manual.html#SEC35">Field update</A>
<LI><A NAME="SEC36" HREF="reference_manual.html#SEC36">User-supplied field access function declarations</A>
<LI><A NAME="SEC37" HREF="reference_manual.html#SEC37">Field access examples</A>
</UL>
</UL>
<LI><A NAME="SEC38" HREF="reference_manual.html#SEC38">Modes</A>
<UL>
<LI><A NAME="SEC39" HREF="reference_manual.html#SEC39">Insts, modes, and mode definitions</A>
<LI><A NAME="SEC40" HREF="reference_manual.html#SEC40">Predicate and function mode declarations</A>
<LI><A NAME="SEC41" HREF="reference_manual.html#SEC41">Constrained polymorphic modes</A>
<LI><A NAME="SEC42" HREF="reference_manual.html#SEC42">Different clauses for different modes</A>
</UL>
<LI><A NAME="SEC43" HREF="reference_manual.html#SEC43">Unique modes</A>
<UL>
<LI><A NAME="SEC44" HREF="reference_manual.html#SEC44">Destructive update</A>
<LI><A NAME="SEC45" HREF="reference_manual.html#SEC45">Backtrackable destructive update</A>
<LI><A NAME="SEC46" HREF="reference_manual.html#SEC46">Limitations of the current implementation</A>
</UL>
<LI><A NAME="SEC47" HREF="reference_manual.html#SEC47">Determinism</A>
<UL>
<LI><A NAME="SEC48" HREF="reference_manual.html#SEC48">Determinism categories</A>
<LI><A NAME="SEC49" HREF="reference_manual.html#SEC49">Determinism checking and inference</A>
<LI><A NAME="SEC50" HREF="reference_manual.html#SEC50">Replacing compile-time checking with run-time checking</A>
<LI><A NAME="SEC51" HREF="reference_manual.html#SEC51">Interfacing nondeterministic code with the real world</A>
<LI><A NAME="SEC52" HREF="reference_manual.html#SEC52">Committed choice nondeterminism</A>
</UL>
<LI><A NAME="SEC53" HREF="reference_manual.html#SEC53">User-defined equality and comparison</A>
<LI><A NAME="SEC54" HREF="reference_manual.html#SEC54">Higher-order programming</A>
<UL>
<LI><A NAME="SEC55" HREF="reference_manual.html#SEC55">Creating higher-order terms</A>
<LI><A NAME="SEC56" HREF="reference_manual.html#SEC56">Calling higher-order terms</A>
<LI><A NAME="SEC57" HREF="reference_manual.html#SEC57">Higher-order modes</A>
</UL>
<LI><A NAME="SEC58" HREF="reference_manual.html#SEC58">Modules</A>
<UL>
<LI><A NAME="SEC59" HREF="reference_manual.html#SEC59">The module system</A>
<LI><A NAME="SEC60" HREF="reference_manual.html#SEC60">An example module.</A>
<LI><A NAME="SEC61" HREF="reference_manual.html#SEC61">Sub-modules</A>
<UL>
<LI><A NAME="SEC62" HREF="reference_manual.html#SEC62">Nested sub-modules</A>
<LI><A NAME="SEC63" HREF="reference_manual.html#SEC63">Separate sub-modules</A>
<LI><A NAME="SEC64" HREF="reference_manual.html#SEC64">Visibility rules</A>
<LI><A NAME="SEC65" HREF="reference_manual.html#SEC65">Implementation bugs and limitations</A>
</UL>
</UL>
<LI><A NAME="SEC66" HREF="reference_manual.html#SEC66">Type classes</A>
<UL>
<LI><A NAME="SEC67" HREF="reference_manual.html#SEC67">Typeclass declarations</A>
<LI><A NAME="SEC68" HREF="reference_manual.html#SEC68">Instance declarations</A>
<LI><A NAME="SEC69" HREF="reference_manual.html#SEC69">Abstract typeclass declarations</A>
<LI><A NAME="SEC70" HREF="reference_manual.html#SEC70">Abstract instance declarations</A>
<LI><A NAME="SEC71" HREF="reference_manual.html#SEC71">Type class constraints on predicates and functions</A>
<LI><A NAME="SEC72" HREF="reference_manual.html#SEC72">Type class constraints on type class declarations</A>
<LI><A NAME="SEC73" HREF="reference_manual.html#SEC73">Type class constraints on instance declarations</A>
</UL>
<LI><A NAME="SEC74" HREF="reference_manual.html#SEC74">Existential types</A>
<UL>
<LI><A NAME="SEC75" HREF="reference_manual.html#SEC75">Existentially typed predicates and functions</A>
<UL>
<LI><A NAME="SEC76" HREF="reference_manual.html#SEC76">Syntax for explicit type quantifiers</A>
<LI><A NAME="SEC77" HREF="reference_manual.html#SEC77">Semantics of type quantifiers</A>
<LI><A NAME="SEC78" HREF="reference_manual.html#SEC78">Examples of correct code using type quantifiers</A>
<LI><A NAME="SEC79" HREF="reference_manual.html#SEC79">Examples of incorrect code using type quantifiers</A>
</UL>
<LI><A NAME="SEC80" HREF="reference_manual.html#SEC80">Existential class constraints</A>
<LI><A NAME="SEC81" HREF="reference_manual.html#SEC81">Existentially typed data types</A>
<LI><A NAME="SEC82" HREF="reference_manual.html#SEC82">Some idioms using existentially quantified types</A>
</UL>
<LI><A NAME="SEC83" HREF="reference_manual.html#SEC83">Semantics</A>
<LI><A NAME="SEC84" HREF="reference_manual.html#SEC84">Foreign language interface</A>
<UL>
<LI><A NAME="SEC85" HREF="reference_manual.html#SEC85">Calling foreign code from Mercury</A>
<UL>
<LI><A NAME="SEC86" HREF="reference_manual.html#SEC86">pragma foreign_proc</A>
<LI><A NAME="SEC87" HREF="reference_manual.html#SEC87">Foreign code attributes</A>
</UL>
<LI><A NAME="SEC88" HREF="reference_manual.html#SEC88">Data passing conventions</A>
<UL>
<LI><A NAME="SEC89" HREF="reference_manual.html#SEC89">C data passing conventions</A>
<LI><A NAME="SEC90" HREF="reference_manual.html#SEC90">IL and C# data passing conventions</A>
</UL>
<LI><A NAME="SEC91" HREF="reference_manual.html#SEC91">Using foreign types from Mercury</A>
<LI><A NAME="SEC92" HREF="reference_manual.html#SEC92">Adding foreign declarations</A>
<LI><A NAME="SEC93" HREF="reference_manual.html#SEC93">Adding foreign definitions</A>
<LI><A NAME="SEC94" HREF="reference_manual.html#SEC94">Language specific bindings</A>
<UL>
<LI><A NAME="SEC95" HREF="reference_manual.html#SEC95">Interfacing with C</A>
<UL>
<LI><A NAME="SEC96" HREF="reference_manual.html#SEC96">Using pragma foreign_proc for C</A>
<LI><A NAME="SEC97" HREF="reference_manual.html#SEC97">Using pragma foreign_decl for C</A>
<LI><A NAME="SEC98" HREF="reference_manual.html#SEC98">Using pragma foreign_code for C</A>
<LI><A NAME="SEC99" HREF="reference_manual.html#SEC99">Using pragma foreign_type for C</A>
</UL>
<LI><A NAME="SEC100" HREF="reference_manual.html#SEC100">Interfacing with C#</A>
<UL>
<LI><A NAME="SEC101" HREF="reference_manual.html#SEC101">Using pragma foreign_type for C#</A>
<LI><A NAME="SEC102" HREF="reference_manual.html#SEC102">Using pragma foreign_proc for C#</A>
<LI><A NAME="SEC103" HREF="reference_manual.html#SEC103">Using pragma foreign_decl for C#</A>
<LI><A NAME="SEC104" HREF="reference_manual.html#SEC104">Using pragma foreign_code for C#</A>
</UL>
<LI><A NAME="SEC105" HREF="reference_manual.html#SEC105">Interfacing with IL</A>
<UL>
<LI><A NAME="SEC106" HREF="reference_manual.html#SEC106">Using pragma foreign_type for IL</A>
<LI><A NAME="SEC107" HREF="reference_manual.html#SEC107">Using pragma foreign_proc for IL</A>
<LI><A NAME="SEC108" HREF="reference_manual.html#SEC108">Using pragma foreign_decl for IL</A>
<LI><A NAME="SEC109" HREF="reference_manual.html#SEC109">Using pragma foreign_code for IL</A>
</UL>
<LI><A NAME="SEC110" HREF="reference_manual.html#SEC110">Interfacing with Managed C++</A>
<UL>
<LI><A NAME="SEC111" HREF="reference_manual.html#SEC111">Using pragma foreign_type for MC++</A>
<LI><A NAME="SEC112" HREF="reference_manual.html#SEC112">Using pragma foreign_proc for MC++</A>
<LI><A NAME="SEC113" HREF="reference_manual.html#SEC113">Using pragma foreign_decl for MC++</A>
<LI><A NAME="SEC114" HREF="reference_manual.html#SEC114">Using pragma foreign_code for MC++</A>
</UL>
</UL>
</UL>
<LI><A NAME="SEC115" HREF="reference_manual.html#SEC115">C interface</A>
<UL>
<LI><A NAME="SEC116" HREF="reference_manual.html#SEC116">Calling C code from Mercury</A>
<UL>
<LI><A NAME="SEC117" HREF="reference_manual.html#SEC117">pragma import</A>
<LI><A NAME="SEC118" HREF="reference_manual.html#SEC118">pragma c_code</A>
<LI><A NAME="SEC119" HREF="reference_manual.html#SEC119">Nondet pragma c_code</A>
<LI><A NAME="SEC120" HREF="reference_manual.html#SEC120">C code attributes</A>
<LI><A NAME="SEC121" HREF="reference_manual.html#SEC121">Purity and side effects</A>
</UL>
<LI><A NAME="SEC122" HREF="reference_manual.html#SEC122">Including C headers</A>
<LI><A NAME="SEC123" HREF="reference_manual.html#SEC123">Including C code</A>
<LI><A NAME="SEC124" HREF="reference_manual.html#SEC124">Calling Mercury code from C</A>
<LI><A NAME="SEC125" HREF="reference_manual.html#SEC125">Linking with C object files</A>
<LI><A NAME="SEC126" HREF="reference_manual.html#SEC126">Passing data to and from C</A>
<LI><A NAME="SEC127" HREF="reference_manual.html#SEC127">Using C pointers</A>
<LI><A NAME="SEC128" HREF="reference_manual.html#SEC128">Memory management</A>
<LI><A NAME="SEC129" HREF="reference_manual.html#SEC129">Trailing</A>
<UL>
<LI><A NAME="SEC130" HREF="reference_manual.html#SEC130">Choice points</A>
<LI><A NAME="SEC131" HREF="reference_manual.html#SEC131">Value trailing</A>
<LI><A NAME="SEC132" HREF="reference_manual.html#SEC132">Function trailing</A>
<LI><A NAME="SEC133" HREF="reference_manual.html#SEC133">Delayed goals and floundering</A>
<LI><A NAME="SEC134" HREF="reference_manual.html#SEC134">Avoiding redundant trailing</A>
</UL>
</UL>
<LI><A NAME="SEC135" HREF="reference_manual.html#SEC135">Impurity declarations</A>
<UL>
<LI><A NAME="SEC136" HREF="reference_manual.html#SEC136">Choosing the right level of purity</A>
<LI><A NAME="SEC137" HREF="reference_manual.html#SEC137">Purity ordering</A>
<LI><A NAME="SEC138" HREF="reference_manual.html#SEC138">Semantics</A>
<LI><A NAME="SEC139" HREF="reference_manual.html#SEC139">Declaring impure functions and predicates</A>
<LI><A NAME="SEC140" HREF="reference_manual.html#SEC140">Marking a call as impure</A>
<LI><A NAME="SEC141" HREF="reference_manual.html#SEC141">Promising that a predicate is pure</A>
<LI><A NAME="SEC142" HREF="reference_manual.html#SEC142">An example using impurity</A>
<LI><A NAME="SEC143" HREF="reference_manual.html#SEC143">Using impurity with higher-order code</A>
<UL>
<LI><A NAME="SEC144" HREF="reference_manual.html#SEC144">Purity annotations on higher-order types</A>
<LI><A NAME="SEC145" HREF="reference_manual.html#SEC145">Purity annotations on lambda expressions</A>
<LI><A NAME="SEC146" HREF="reference_manual.html#SEC146">Purity annotations on higher-order calls</A>
</UL>
</UL>
<LI><A NAME="SEC147" HREF="reference_manual.html#SEC147">Pragmas</A>
<UL>
<LI><A NAME="SEC148" HREF="reference_manual.html#SEC148">Inlining</A>
<LI><A NAME="SEC149" HREF="reference_manual.html#SEC149">Type specialization</A>
<UL>
<LI><A NAME="SEC150" HREF="reference_manual.html#SEC150">Syntax and semantics of type specialization pragmas</A>
<LI><A NAME="SEC151" HREF="reference_manual.html#SEC151">When to use type specialization</A>
<LI><A NAME="SEC152" HREF="reference_manual.html#SEC152">Implementation specific details</A>
</UL>
<LI><A NAME="SEC153" HREF="reference_manual.html#SEC153">Obsolescence</A>
<LI><A NAME="SEC154" HREF="reference_manual.html#SEC154">Source file name</A>
</UL>
<LI><A NAME="SEC155" HREF="reference_manual.html#SEC155">Implementation-dependent extensions</A>
<UL>
<LI><A NAME="SEC156" HREF="reference_manual.html#SEC156">Fact tables</A>
<LI><A NAME="SEC157" HREF="reference_manual.html#SEC157">Tabled evaluation</A>
<LI><A NAME="SEC158" HREF="reference_manual.html#SEC158">Termination analysis</A>
<LI><A NAME="SEC159" HREF="reference_manual.html#SEC159">Aditi deductive database interface</A>
<UL>
<LI><A NAME="SEC160" HREF="reference_manual.html#SEC160">Aditi overview</A>
<LI><A NAME="SEC161" HREF="reference_manual.html#SEC161">Aditi pragma declarations</A>
<LI><A NAME="SEC162" HREF="reference_manual.html#SEC162">Aditi update syntax</A>
<UL>
<LI><A NAME="SEC163" HREF="reference_manual.html#SEC163">Aditi update notes</A>
<LI><A NAME="SEC164" HREF="reference_manual.html#SEC164">Insertion and deletion</A>
<LI><A NAME="SEC165" HREF="reference_manual.html#SEC165">Bulk insertion and deletion</A>
<LI><A NAME="SEC166" HREF="reference_manual.html#SEC166">Modification</A>
</UL>
<LI><A NAME="SEC167" HREF="reference_manual.html#SEC167">Aditi glossary</A>
</UL>
</UL>
<LI><A NAME="SEC168" HREF="reference_manual.html#SEC168">Bibliography</A>
<UL>
<LI><A NAME="SEC169" HREF="reference_manual.html#SEC169">[1]</A>
<LI><A NAME="SEC170" HREF="reference_manual.html#SEC170">[2]</A>
<LI><A NAME="SEC171" HREF="reference_manual.html#SEC171">[3]</A>
<LI><A NAME="SEC172" HREF="reference_manual.html#SEC172">[4]</A>
<LI><A NAME="SEC173" HREF="reference_manual.html#SEC173">[5]</A>
<LI><A NAME="SEC174" HREF="reference_manual.html#SEC174">[6]</A>
<LI><A NAME="SEC175" HREF="reference_manual.html#SEC175">[7]</A>
<LI><A NAME="SEC176" HREF="reference_manual.html#SEC176">[8]</A>
</UL>
</UL>
<HR>
This document was generated using the
<A HREF="http://asis01.cern.ch/infohtml/texi2html.html">texi2html</A>
translator version 1.31.
</BODY>
</HTML>