If a module name is given (as in call(basics:append(X),Y,[1,2]))
then it overrides the module of the term, e.g. append(X).
If no module is given, it takes the module of the "call term".
E.g. call(append(X),Y,[1,2]) would call append/3 in the module
of the term append/1.
This results in the perhaps unintuitive consequence, that if you want
to call append/3 in basics as above, you need to
:- import append/1 from basics.
even though append/1 isn't defined in basics. As long as you don't
call append/1, all works fine and the above call works.