export function reduce<T, U>(
  collection: T[],
  iteratee: (accumulator: U, item: T) => U,
  initialAccumulator: U
): U {
  let accumulator = initialAccumulator;

  for (const item of collection) {
    accumulator = iteratee(accumulator, item);
  }

  return accumulator;
}
