first(emptyErrorAlternative = THROW_IF_EMPTY) {
        let iter = this[Symbol.iterator]();

        let first = iter.next();
        if (!first.done) {
            return first.value;
        }

        if (emptyErrorAlternative === THROW_IF_EMPTY) {
            throw new Error("Empty sequence has no first item.")
        }

        return emptyErrorAlternative;
    }
Returns the first item in the sequence.
@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