docs: public static <T> Choice<T> of(final T t) {
      checkNotNull(t);
      return new Choice<T>() {
        @Override
        protected Iterator<T> iterator() {
          return Iterators.singletonIterator(t);
        }
  
        @Override
        public Optional<T> first() {
          return Optional.of(t);
        }
  
        @Override
        public Choice<T> condition(Predicate<? super T> predicate) {
          return predicate.apply(t) ? this : Choice.<T>none();
        }
  
        @Override
        public <R> Choice<R> thenChoose(Function<? super T, Choice<R>> function) {
          return function.apply(t);
        }
  
        @Override
        public <R> Choice<R> thenOption(Function<? super T, Optional<R>> function) {
          return fromOptional(function.apply(t));
        }
  
        @Override
        public <R> Choice<R> transform(Function<? super T, R> function) {
          return of(function.apply(t));
        }
  
        @Override
        public String toString() {
          return String.format("Choice.of(%s)", t);
        }
      };
    }