single(emptyManyErrorAlternative = THROW_IF_EMPTY) {
        let iter = this[Symbol.iterator]();

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

        if (emptyManyErrorAlternative === THROW_IF_EMPTY) {
            if (first.done) {
                throw new Error("Empty sequence doesn't contain a single item.")
            } else {
                throw new Error("Sequence contains more than a single item.")
            }
        }

        return emptyManyErrorAlternative;
    }
Returns the single item in the sequence. If there are no items or multiple items in the sequence, either an error
is thrown or an alternative value is returned.

@param {=A} emptyManyErrorAlternative The value to return if the sequence is empty. If not provided, an error
is thrown when the sequence is empty or has more than one value.
@returns {T|A}
@template T, A