fold(combiner, emptyErrorAlternative = THROW_IF_EMPTY) {
        let accumulator = EMPTY_SYGIL;
        for (let e of this._iterable) {
            accumulator = accumulator === EMPTY_SYGIL ? e : combiner(accumulator, e);
        }
        return emptyFallback(
            accumulator,
            emptyErrorAlternative,
            "Folded empty sequence without providing an alternative result.");
    }
Combines the items of a sequence into a single result by iteratively applying a combining function. If the
sequence is empty, then either an error is thrown or the given alternative value is returned.
@param {!function(T, T) : T} combiner
@param {=A} emptyErrorAlternative The value to return if the sequence is empty. If not provided, an error
is thrown when the sequence is empty.
@returns {T|A}
@template T, A