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