This declaration is needed to compile calls to an external predicate before it is actually defined with external/2.
Success:
% compiling a call to an external before its definition (see description
% of external/2 for detail on creating external predicates).
[eclipse]: [user].
:- import prmsg/1 from msg_lib.
:- external(prmsg/1). % declare its call_type
hello :- prmsg("hello").
user compiled 216 bytes in 0.03 seconds
% definition of sines/2 will not raise an inconsistent type definition
% thanks to the proper declaration above.
[eclipse]: sh("cat msg_lib.pl").
:- module(msg_lib).
:- load('msg.so'). % see example in external/2
:- external(prmsg/1, p_prmsg).
:- export prmsg/1.
yes
[eclipse]: [msg_lib].
msg_lib.pl compiled 0 bytes in 0.18 seconds
yes.
[eclipse]: hello.
message: hello
yes.
Error:
external(PredSpec). (Error 4).
external("p/0"). (Error 5).
[eclipse]: [user].
p :- a.
user compiled 32 bytes in 0.00 seconds
yes.
[eclipse]: external(a/0). (Error 62).