code: public static <A> Iterable<Pair<Integer, A>> indexed(final Iterable<? extends A> iterable) {
  		if (iterable == null)
  			throw new NullPointerException("iterable");
  		return new Iterable<Pair<Integer, A>>() {
  			@Override
  			public Iterator<Pair<Integer, A>> iterator() {
  				return IteratorExtensions.indexed(iterable.iterator());
  			}
  		};
  	}
docs: Returns an Iterable of Pairs where the nth pair is created by taking the nth element of the source as the value
  its 0-based index as the key. E.g. <code>zipWitIndex(#["a", "b", "c"]) == #[(0, "a"), (1, "b"), (2, "c")]</code>
  
  If the index would overflow, {@link Integer#MAX_VALUE} is returned for all subsequent elements.
  
  The resulting Iterable is a lazily computed view, so any modifications to the underlying Iterable will be
  reflected on iteration. The result's Iterator does not support {@link Iterator#remove()}
  
  @param iterable
  the elements. May not be <code>null</code>.
  @return the zipped result
  @since 2.7