first (default) or last 
and determines whether the new handler is expected as first or last.Defined channels are described below. The Channel argument is the name of the term listed below. The arguments are added as additional arguments to the given Closure.
gc thread. 
This specific channel is used by clause_info/5 
to reclaim source layout of reclaimed clauses. User applications should 
typically use the PredicateIndicator channel.library(prolog_breakpoints)thread_exit channel that is 
also used by the at_exit(Closure) option of
thread_create/3.incremental and monotonic dynamic 
predicates. Below is an example illustrating events from changing a 
dynamic predicate.
:- dynamic p/1.
:- prolog_listen(p/1, updated(p/1)).
updated(Pred, Action, Context) :-
    format('Updated ~p: ~p ~p~n', [Pred, Action, Context]).
?- assert(p(a)). Updated p/1: assertz <clause>(0x55db261709d0) ?- retractall(p(_)). Updated p/1: retractall start(user:p(_12294)) Updated p/1: retract <clause>(0x55db261719c0) Updated p/1: retractall end(user:p(_12294))
retractall. The 
context argument is start(Head) or end(Head).asserta,
assertz or retract. Context is the involved 
clause. See transaction/1 
and snapshot/1.