[ Obsolete | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]

# call_explicit(+Goal, +Module)

Succeeds if Goal which is defined in module Module succeeds.

Goal
  Atom or compound term.
Module
  Atom.

### This built-in predicate is obsolete!

## Description

This predicate provides a means to override the module system's visibility rules. While the builtins call/1 and call/2 call the predicate that is visible from a certain module, call_explicit/2 allows to call a predicate which is defined in a certain module. This allows calling a predicate that is otherwise not visible in the caller module. The most plausible use of this feature is to allow local redefinition of a predicate using the existing definition in the implementation.

Note that call_explicit can only call exported or global predicates in order to preserve module privacy.

### Modules

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

### Fail Conditions

Fails if Goal fails

### Resatisfiable

Resatisfiable if Goal is resatisfiable

### Exceptions

(4) instantiation fault
  Goal is not instantiated.
(4) instantiation fault
  Module is not instantiated.
(5) type error
  Goal is neither an atom nor a compound term.
(5) type error
  Module is not an atom.
(68) calling an undefined procedure
  Goal is an undefined procedure in Module.

## Examples

    Success:
         [eclipse]: cd(~).
         system interface error:
                          No such file or directory in cd(~)

         [eclipse]: [user].         % redefine cd/1, using its
                                  % original definition
          cd(~) :- !,
                   getenv('HOME', Home),
                   call_explicit(cd(Home), sepia_kernel).
          cd(Dir) :-
                   call_explicit(cd(Dir), sepia_kernel).

          [eclipse]: cd(~).
          yes.

    Fail:
          call_explicit(fail, sepia_kernel).

    Error:
          call_explicit(Var,eclipse).                (Error 4).
          call_explicit(ls,Var).                     (Error 4).
          call_explicit("write(a)",eclipse).         (Error 5).
          call_explicit(foo(a),eclipse).             (Error 68).

## See Also

: / 2, call / 1, @ / 2