using System.Collections.Generic;
static int Add(int a, int b) => a + b;
var numbers = new int[]{ 1, 2, 3, 4, 5, 6};
var sum = reduce<int>(numbers, Add);
static T reduce<T>(IEnumerable<T> values, Func<T, T, T> reducer)
var enumerator = values.GetEnumerator();
_ = enumerator.MoveNext();
var current = enumerator.Current;
while (enumerator.MoveNext())
next = enumerator.Current;
current = reducer(current, next);