%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%

:- module uniq_mutable.
:- interface.

:- type foo
    --->    foo.

:- implementation.

:- import_module io.
:- import_module list.

:- type io_pred == pred(io, io).
:- inst io_pred == (pred(di, uo) is det).

    % Some invalid mutable insts - we should get error messages.
    %
:- mutable(alpha, int, 3, unique, [untrailed]).
:- mutable(beta,  int, 4, mostly_unique, [untrailed]).
:- mutable(gamma, int, _, free, [untrailed]).
:- mutable(delta, int, _, dead, [untrailed]).
:- mutable(epsilon, int, _, mostly_dead, [untrailed]).

    % Some valid mutable insts - we should get no error messages.
    %
:- mutable(zeta, int, 7, ground, [untrailed]).
:- mutable(eta,  int, _, any, [untrailed]).
:- mutable(theta, pred(foo), get_foo, (pred(out) is det), [untrailed]).
:- mutable(iota, pred(io, io), io.nl, (pred(di, uo) is det), [untrailed]).
:- mutable(kappa, list(io_pred), [], list(io_pred), [untrailed]).

:- pred get_foo(foo::out) is det.

get_foo(foo).
