public static <S, A> Traversal<S, A> traversal(
     final F<S, A> get1,
     final F<S, A> get2,
     final F<S, A> get3,
     final F<S, A> get4,
     final F5<A, A, A, A, S, S> set) {
   return new Traversal<>(PTraversal.pTraversal(get1, get2, get3, get4, set));
 }
 @Override
 public F<S, P1<S>> modifyP1F(final F<A, P1<A>> f) {
   return pTraversal.modifyP1F(f);
 }
 @Override
 public F<S, Stream<S>> modifyStreamF(final F<A, Stream<A>> f) {
   return pTraversal.modifyStreamF(f);
 }
 @Override
 public F<S, Option<S>> modifyOptionF(final F<A, Option<A>> f) {
   return pTraversal.modifyOptionF(f);
 }
 @Override
 public F<S, List<S>> modifyListF(final F<A, List<A>> f) {
   return pTraversal.modifyListF(f);
 }
 @Override
 public F<S, Promise<S>> modifyPromiseF(final F<A, Promise<A>> f) {
   return pTraversal.modifyPromiseF(f);
 }
 /** compose a {@link Traversal} with a {@link Traversal} */
 public <C> Traversal<S, C> composeTraversal(final Traversal<A, C> other) {
   return new Traversal<>(pTraversal.composeTraversal(other.pTraversal));
 }
 @Override
 public <M> F<S, M> foldMap(final Monoid<M> monoid, final F<A, M> f) {
   return pTraversal.foldMap(monoid, f);
 }
 @Override
 public <L> F<S, Either<L, S>> modifyEitherF(final F<A, Either<L, A>> f) {
   return pTraversal.modifyEitherF(f);
 }
 @Override
 public <C> F<S, F<C, S>> modifyFunctionF(final F<A, F<C, A>> f) {
   return pTraversal.modifyFunctionF(f);
 }
 public static <S> Traversal<Either<S, S>, S> codiagonal() {
   return new Traversal<>(PTraversal.pCodiagonal());
 }
 public static <S> Traversal<S, S> id() {
   return new Traversal<>(PTraversal.pId());
 }
 /** view a {@link Traversal} as a {@link Setter} */
 @Override
 public Setter<S, A> asSetter() {
   return new Setter<>(pTraversal.asSetter());
 }
 @Override
 public <E> F<S, Validation<E, S>> modifyValidationF(
     Semigroup<E> s, final F<A, Validation<E, A>> f) {
   return pTraversal.modifyValidationF(s, f);
 }
 @Override
 public F<S, IO<S>> modifyIOF(final F<A, IO<A>> f) {
   return pTraversal.modifyIOF(f);
 }
 @Override
 public F<S, V2<S>> modifyV2F(final F<A, V2<A>> f) {
   return pTraversal.modifyV2F(f);
 }
 @Override
 public F<S, Trampoline<S>> modifyTrampolineF(final F<A, Trampoline<A>> f) {
   return pTraversal.modifyTrampolineF(f);
 }
 /** join two {@link Traversal} with the same target */
 public <S1> Traversal<Either<S, S1>, A> sum(final Traversal<S1, A> other) {
   return new Traversal<>(pTraversal.sum(other.pTraversal));
 }
 /** compose a {@link Traversal} with a {@link Setter} */
 public <C> Setter<S, C> composeSetter(final Setter<A, C> other) {
   return new Setter<>(pTraversal.composeSetter(other.pSetter));
 }