docs: public <R> Choice<R> thenChoose(final Function<? super T, Choice<R>> function) {
      checkNotNull(function);
      if (Thread.interrupted()) {
        throw new RuntimeException(new InterruptedException());
      }
      final Choice<T> thisChoice = this;
      return new Choice<R>() {
        @Override
        protected Iterator<R> iterator() {
          if (Thread.interrupted()) {
            throw new RuntimeException(new InterruptedException());
          }
          return Iterators.concat(
              Iterators.transform(thisChoice.iterator(), (T t) -> function.apply(t).iterator()));
        }
      };
    }