improve is_iterator