This directory contains two impure reference type modules, and a module
that allows scoped non-backtrackable update, plus two example modules
using these types. These serve as an example of impure coding.
Generally this sort of coding is not necessary, and it can be quite tedious
and error-prone, but occasionally it may permit greater efficiency
than using pure Mercury code, or may permit you to write in Mercury
what you would otherwise have to write in C. See the "Impurity declarations"
chapter of the Mercury Language Reference Manual for more information
on impurity.

This directory contains

    reference.m     a backtrackable reference types
    nb_reference.m  a non-backtrackable reference types

    scoped_update.m scoping for non-backtrackable updates

    global.m        a wrapper module used for building a
                    library containing the above modules

    c_reference.h   C types used to implement the reference types

The samples directory contains

    max_of.m        an example of non-backtrackable references
    test_max.m      test case for max_of.m

The tests directory contains

    ref_test.m      tests of reference.m, nb_reference.m and scoped_update.m
    glob_test.m     tests use of c_reference.h to implement global variables

