The definition of this Prolog library predicate is:
:- tool(checklist/3, checklist_body/4).
checklist_body(_, [], _).
checklist_body(Pred, [Head|Tail], M) :-
Pred =.. PL,
append(PL, [Head], NewPred),
Call =.. NewPred,
call(Call, M),
checklist_body(Pred, Tail, M).
This predicate does not perform any type testing functions.
Success: checklist(integer, [1, 3, 5]). checklist(spy, [var/1, functor/3]). Fail: checklist(current_op(_, _), [+, -, =]). (fails because the precedence of = does not match that of +)