We actually should use the typedef for the predicate function type here