docs: 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;
  	}