I *love* this idea.
:D
Although, what happens if the expression for items is costly? We have to make sure if you do:process(someExpensiveCalculation()); it doesn't turn into:process(someExpensiveCalculation(), someExpensiveCalculation().length);
It should be evaluated once anyway, since it might have side effects.
