replace listof contract with predicate