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).