code: public static <X, CX extends Collection<X>> Lens.Simple<CX, Set<X>> asSet(
              Function<? super CX, ? extends CX> copyFn) {
          return simpleLens(HashSet::new, (xsL, xsS) -> {
              Set<X> missing = new HashSet<>(xsS);
              missing.removeAll(xsL);
              CX updated = copyFn.apply(xsL);
              updated.addAll(missing);
              updated.retainAll(xsS);
              return updated;
          });
      }
docs: Convenience static factory method for creating a lens that focuses on an arbitrary {@link Collection} as a
  {@link Set}.
  
  @param copyFn the copying function
  @param <X>    the collection element type
  @param <CX>   the type of the collection
  @return a lens that focuses on a Collection as a Set