export function fold(value: Iterable, initial: R, accumulate: (acc: R, it: T) => R): R { let acc = initial; for (const it of value) { acc = accumulate(acc, it); } return acc; }