currently accepts any iterable that implements [Symbol.iterator] or [Symbol.asyncIterator] as a catchall