Note that !/0 does not cut through call/2.
Success: [eclipse]: [user]. :-module(m). p. user compiled 28 bytes in 0.00 seconds yes. [eclipse]: p. calling an undefined procedure p in module eclipse [eclipse]: call(p, m). yes. Fail: call(fail, any). Error: call(Var,eclipse). (Error 4). call(ls,Var). (Error 4). call("write(a)",eclipse). (Error 5). call(foo(a),eclipse). (Error 68).