[ Modules | Reference Manual | Alphabetic Index ]


Locks access to internals of the current module


Used to forbid access from outside the current module to its internals, except through the module interface (i.e. its exports).

This primitive is usually used a directive in the source code of the module to be locked.

A module locked with lock/0 cannot be unlocked. Repeated locking (from within the module) is silently accepted.

Modes and Determinism


This predicate is sensitive to its module context (tool predicate, see @/2).


    % After compiling the following code:
     :- module(m).
     :- export pub/0.
     pub :- writeln(pub).
     priv :- writeln(priv).
     :- lock.

    ?- module(m).
    trying to access a locked module in module(m)

    ?- call(pub) @ m.

    ?- call(priv) @ m.
    trying to access a locked module in priv

    ?- assert(foo) @ m.
    trying to access a locked module in assert_(foo, m)

See Also

lock_pass / 1, unlock / 2, get_module_info / 3