code: function(list, callback, context){
  		// each index in something list-like. Uses iterator if it has it.
  		if(Array.isArray(list)) {
  			return shapeReflections.eachListLike(list, callback, context);
  		} else {
  			var iter, iterator = list[canSymbol.iterator];
  			if(typeReflections.isIteratorLike(list)) {
  				// we are looping through an iterator
  				iter = list;
  			} else if(iterator) {
  				iter = iterator.call(list);
  			}
  			// fast-path arrays
  			if(iter) {
  				var res, index = 0;
  
  				while(!(res = iter.next()).done) {
  					if( callback.call(context || list, res.value, index++, list) === false ){
  						break;
  					}
  				}
  			} else {
  				shapeReflections.eachListLike(list, callback, context);
  			}
  		}
  		return list;
  	}
docs: @function {ListLike, function(*), [Object]} can-reflect.eachIndex eachIndex
  @parent can-reflect/shape
  @description  Iterate a ListLike calling `callback` on each numerically indexed element
  
  @signature `eachIndex(list, callback, context)`
  
  For each numeric index from 0 to `list.length - 1`, call `callback`, passing the current
  property value, the current index, and `list`, and optionally setting `this` as `context`
  if specified (otherwise use the current property value).
  
  ```js
  var foo = new DefineList([ "bar", "baz" ]);
  
  canReflect.eachIndex(foo, console.log, console); // -> logs 'bar 0 {foo}'; logs 'baz 1 {foo}'
  ```
  
  @param  {ListLike}   list     The list to iterate over
  @param  {Function(*, Number)} callback a function that receives each item
  @param  {[Object]}   context  an optional `this` context for calling the callback
  @return {ListLike}   the original list