
call_explicit(+Goal, +Module)

   Succeeds if Goal which is defined in module Module succeeds.



Arguments
   Goal                Atom or compound term.
   Module              Atom.

Type
   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 context 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 --- Goal is not instantiated.
     4 --- Module is not instantiated.
     5 --- Goal is neither an atom nor a compound term.
     5 --- Module is not an atom.
    68 --- 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
