generalize iteration to allow arbitrary collections