This declaration is needed to compile calls to an external predicate before it is actually defined with b_external/2.
Success:
% compiling a call to an external before its definition (see description
% of b_external/2 for detail on creating external predicates).
[eclipse]: [user].
:- import sines/2 from trig_lib.
:- b_external(sines/2). % declare its call_type
p(Values) :- sines(Res, Values), writeln(Res), fail.
p(_).
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 trig_lib.pl").
:- module(trig_lib).
:- load('sin.o', "-lm"). % see example in b_external/2
:- b_external(sines/2, p_sines).
:- export sines/2.
yes
[eclipse]: [trig_lib].
trig_lib.pl compiled 0 bytes in 0.18 seconds
yes.
[eclipse]: p([0.0,45.0,90.0,270.0]).
0.0
0.707107
1.0
-1.0
yes.
Error:
b_external(PredSpec). (Error 4).
b_external("p/0"). (Error 5).
[eclipse]: [user].
:- external(a/0).
p :- a.
user compiled 32 bytes in 0.00 seconds
yes.
[eclipse]: b_external(a/0). (Error 62).