Is there a directive or some other idiom or technique to force all the clauses for a particular predicate to have the exact same arity? I find myself chasing bugs fairly often where I forgot to put the correct number of arguments in one of the clauses and that causes the predicate to fail unexpectedly; especially with the termination clause in a list processing predicate (e.g. - the final clause when tearing apart a list that checks for the empty set and succeeds to end processing).
If there was a directive that would warn you about predicates that have clauses where the head does not have the same number of arguments for all clauses, that would be useful. For example:
:- enforce_arity dubious_predicate/3.