This is mercury_ref.info, produced by makeinfo version 4.8 from
reference_manual.texi_pp.

INFO-DIR-SECTION The Mercury Programming Language
START-INFO-DIR-ENTRY
* Mercury Language: (mercury_ref).  The Mercury Language Reference Manual.
END-INFO-DIR-ENTRY

   This file documents the Mercury programming language, version
14.01.1.

   Copyright (C) 1995-2014 The University of Melbourne.

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the entire resulting derived work is distributed under the terms
of a permission notice identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions.


Indirect:
mercury_ref.info-1: 960
mercury_ref.info-2: 299556

Tag Table:
(Indirect)
Node: Top960
Node: Introduction3279
Node: Syntax5189
Node: Syntax Overview5571
Node: Tokens6342
Node: Terms12013
Node: Builtin Operators15495
Ref: Builtin Operators-Footnote-123082
Node: Items23121
Node: Declarations23893
Node: Facts24742
Node: Rules25524
Node: Goals26256
Node: State variables38287
Node: DCG-rules45278
Node: DCG-goals46565
Node: Data-terms51270
Node: Data-functors52382
Node: Record syntax54057
Node: Unification expressions57118
Node: Conditional expressions58187
Node: Lambda expressions58892
Node: Higher-order function applications61062
Node: Explicit type qualification61805
Node: Variable scoping62704
Node: Implicit quantification64759
Node: Elimination of double negation66175
Node: Types67087
Node: Builtin types67482
Node: User-defined types69122
Node: Discriminated unions69487
Node: Equivalence types73608
Node: Abstract types74505
Node: Predicate and function type declarations75241
Ref: Predicate and function type declarations-Footnote-181086
Node: Field access functions81469
Node: Field selection82269
Node: Field update83319
Node: User-supplied field access function declarations85080
Node: Field access examples87120
Node: Modes88850
Node: Insts modes and mode definitions89120
Node: Predicate and function mode declarations94848
Node: Constrained polymorphic modes101398
Node: Different clauses for different modes104106
Node: Unique modes108339
Node: Destructive update109546
Node: Backtrackable destructive update110971
Node: Limitations of the current implementation112501
Node: Determinism113431
Node: Determinism categories113811
Node: Determinism checking and inference118819
Node: Replacing compile-time checking with run-time checking127632
Node: Interfacing nondeterministic code with the real world130089
Node: Committed choice nondeterminism133462
Node: User-defined equality and comparison136395
Ref: User-defined equality and comparison-Footnote-1143930
Node: Higher-order144310
Node: Creating higher-order terms144961
Node: Calling higher-order terms149802
Node: Higher-order modes152843
Node: Modules156898
Node: The module system157168
Node: An example module160996
Node: Sub-modules162266
Node: Nested sub-modules163000
Node: Separate sub-modules164539
Node: Visibility rules167038
Node: Implementation bugs and limitations168361
Node: Module initialisation169058
Node: Module finalisation170593
Node: Module-local mutable variables171972
Node: Type classes176895
Node: Typeclass declarations177602
Node: Instance declarations180444
Node: Abstract typeclass declarations187729
Node: Abstract instance declarations188738
Node: Type class constraints on predicates and functions190316
Node: Type class constraints on type class declarations192004
Node: Type class constraints on instance declarations194027
Node: Functional dependencies196065
Node: Existential types202052
Node: Existentially typed predicates and functions202884
Node: Syntax for explicit type quantifiers203317
Node: Semantics of type quantifiers204860
Node: Examples of correct code using type quantifiers207714
Node: Examples of incorrect code using type quantifiers208997
Node: Existential class constraints210046
Node: Existentially typed data types211571
Node: Some idioms using existentially quantified types215219
Node: Exception handling219314
Node: Semantics223583
Node: Foreign language interface230691
Node: Calling foreign code from Mercury232360
Node: pragma foreign_proc232868
Node: Foreign code attributes237769
Node: Calling Mercury from foreign code245748
Node: Data passing conventions246801
Node: C data passing conventions247405
Node: C# data passing conventions251160
Node: Java data passing conventions256063
Node: Erlang data passing conventions261561
Node: Using foreign types from Mercury263879
Node: Using Mercury enumerations in foreign code267772
Node: Using foreign enumerations in Mercury code271457
Node: Adding foreign declarations273217
Node: Adding foreign definitions276738
Node: Language specific bindings277685
Node: Interfacing with C278779
Node: Using pragma foreign_type for C279796
Node: Using pragma foreign_export_enum for C282874
Node: Using pragma foreign_enum for C283858
Node: Using pragma foreign_proc for C284301
Node: Using pragma foreign_export for C286881
Node: Using pragma foreign_decl for C289515
Node: Using pragma foreign_code for C291083
Node: Memory management for C291646
Node: Linking with C object files293779
Node: Interfacing with C#295220
Node: Using pragma foreign_type for C#295989
Node: Using pragma foreign_export_enum for C#296694
Node: Using pragma foreign_enum for C#297380
Node: Using pragma foreign_proc for C#297794
Node: Using pragma foreign_export for C#299556
Node: Using pragma foreign_decl for C#300982
Node: Using pragma foreign_code for C#301848
Node: Interfacing with Java302835
Node: Using pragma foreign_type for Java303674
Node: Using pragma foreign_export_enum for Java304415
Node: Using pragma foreign_enum for Java305269
Node: Using pragma foreign_proc for Java305608
Node: Using pragma foreign_export for Java307438
Node: Using pragma foreign_decl for Java308892
Node: Using pragma foreign_code for Java309991
Node: Interfacing with Erlang311002
Node: Using pragma foreign_type for Erlang311582
Node: Using pragma foreign_proc for Erlang312121
Node: Using pragma foreign_export for Erlang313314
Node: Using pragma foreign_decl for Erlang314793
Node: Using pragma foreign_code for Erlang315854
Node: Impurity316645
Node: Purity levels318980
Node: Purity ordering320897
Node: Impurity semantics321196
Node: Declaring impurity323602
Node: Impure goals324995
Node: Promising purity326619
Node: Impurity Example329007
Node: Higher-order impurity330463
Node: Purity annotations on higher-order types331092
Node: Purity annotations on lambda expressions332184
Node: Purity annotations on higher-order calls333224
Node: Solver types334558
Node: The any inst335485
Node: Abstract solver type declarations336493
Node: Solver type definitions336973
Node: Implementing solver types341319
Node: Solver types and negated contexts342717
Node: Trace goals345429
Node: Pragmas354544
Node: Inlining355903
Node: Type specialization356613
Node: Syntax and semantics of type specialization pragmas357258
Node: When to use type specialization358518
Node: Implementation specific details359482
Node: Obsolescence359977
Node: No determinism warnings361117
Node: Source file name362298
Node: Implementation-dependent extensions363966
Node: Fact tables364916
Node: Tabled evaluation366513
Node: Termination analysis378482
Node: Feature sets382716
Node: Trailing385532
Node: Choice points386946
Node: Value trailing387895
Node: Function trailing389034
Node: Delayed goals and floundering392358
Node: Avoiding redundant trailing394100
Node: Bibliography400964
Node: [1]401623
Node: [2]402055
Node: [3]402406
Node: [4]402749
Node: [5]403054

End Tag Table
