package fj;
/**
* Functions across products.
*
* @version %build.number%
*/
public final class P {
private P() {
throw new UnsupportedOperationException();
}
/**
* A function that puts an element in a product-1.
*
* @return A function that puts an element in a product-1.
*/
public static F> p1() {
return new F>() {
public P1 f(final A a) {
return p(a);
}
};
}
/**
* A function that puts an element in a product-1.
*
* @param a The element.
* @return The product-1.
*/
public static P1 p(final A a) {
return new P1() {
public A _1() {
return a;
}
};
}
/**
* A function that puts an element in a product-2.
*
* @return A function that puts an element in a product-2.
*/
public static F>> p2() {
return new F>>() {
public F> f(final A a) {
return new F>() {
public P2 f(final B b) {
return p(a, b);
}
};
}
};
}
/**
* A function that puts elements in a product-2.
*
* @param a An element.
* @param b An element.
* @return The product-2.
*/
public static P2 p(final A a, final B b) {
return new P2() {
public A _1() {
return a;
}
public B _2() {
return b;
}
};
}
/**
* A function that puts an element in a product-3.
*
* @return A function that puts an element in a product-3.
*/
public static F>>> p3() {
return new F>>>() {
public F>> f(final A a) {
return new F>>() {
public F> f(final B b) {
return new F>() {
public P3 f(final C c) {
return p(a, b, c);
}
};
}
};
}
};
}
/**
* A function that puts elements in a product-3.
*
* @param a An element.
* @param b An element.
* @param c An element.
* @return The product-3.
*/
public static P3 p(final A a, final B b, final C c) {
return new P3() {
public A _1() {
return a;
}
public B _2() {
return b;
}
public C _3() {
return c;
}
};
}
/**
* A function that puts an element in a product-4.
*
* @return A function that puts an element in a product-4.
*/
public static F>>>> p4() {
return new F>>>>() {
public F>>> f(final A a) {
return new F>>>() {
public F>> f(final B b) {
return new F>>() {
public F> f(final C c) {
return new F>() {
public P4 f(final D d) {
return p(a, b, c, d);
}
};
}
};
}
};
}
};
}
/**
* A function that puts elements in a product-4.
*
* @param a An element.
* @param b An element.
* @param c An element.
* @param d An element.
* @return The product-4.
*/
public static P4 p(final A a, final B b, final C c, final D d) {
return new P4() {
public A _1() {
return a;
}
public B _2() {
return b;
}
public C _3() {
return c;
}
public D _4() {
return d;
}
};
}
/**
* A function that puts an element in a product-5.
*
* @return A function that puts an element in a product-5.
*/
public static F>>>>> p5() {
return new F>>>>>() {
public F>>>> f(final A a) {
return new F>>>>() {
public F>>> f(final B b) {
return new F>>>() {
public F>> f(final C c) {
return new F>>() {
public F> f(final D d) {
return new F>() {
public P5 f(final E e) {
return p(a, b, c, d, e);
}
};
}
};
}
};
}
};
}
};
}
/**
* A function that puts elements in a product-5.
*
* @param a An element.
* @param b An element.
* @param c An element.
* @param d An element.
* @param e An element.
* @return The product-5.
*/
public static P5 p(final A a, final B b, final C c, final D d, final E e) {
return new P5() {
public A _1() {
return a;
}
public B _2() {
return b;
}
public C _3() {
return c;
}
public D _4() {
return d;
}
public E _5() {
return e;
}
};
}
/**
* A function that puts an element in a product-6.
*
* @return A function that puts an element in a product-6.
*/
public static F>>>>>> p6() {
return new F>>>>>>() {
public F>>>>> f(final A a) {
return new F>>>>>() {
public F>>>> f(final B b) {
return new F>>>>() {
public F>>> f(final C c) {
return new F>>>() {
public F>> f(final D d) {
return new F>>() {
public F> f(final E e) {
return new F>() {
public P6 f(final F$ f) {
return p(a, b, c, d, e, f);
}
};
}
};
}
};
}
};
}
};
}
};
}
/**
* A function that puts elements in a product-6.
*
* @param a An element.
* @param b An element.
* @param c An element.
* @param d An element.
* @param e An element.
* @param f An element.
* @return The product-6.
*/
public static P6 p(final A a, final B b, final C c, final D d, final E e, final F$ f) {
return new P6() {
public A _1() {
return a;
}
public B _2() {
return b;
}
public C _3() {
return c;
}
public D _4() {
return d;
}
public E _5() {
return e;
}
public F$ _6() {
return f;
}
};
}
/**
* A function that puts an element in a product-7.
*
* @return A function that puts an element in a product-7.
*/
public static F>>>>>>> p7() {
return new F>>>>>>>() {
public F>>>>>> f(final A a) {
return new F>>>>>>() {
public F>>>>> f(final B b) {
return new F>>>>>() {
public F>>>> f(final C c) {
return new F>>>>() {
public F>>> f(final D d) {
return new F>>>() {
public F>> f(final E e) {
return new F>>() {
public F> f(final F$ f) {
return new F>() {
public P7 f(final G g) {
return p(a, b, c, d, e, f, g);
}
};
}
};
}
};
}
};
}
};
}
};
}
};
}
/**
* A function that puts elements in a product-7.
*
* @param a An element.
* @param b An element.
* @param c An element.
* @param d An element.
* @param e An element.
* @param f An element.
* @param g An element.
* @return The product-7.
*/
public static P7 p(final A a, final B b, final C c, final D d, final E e, final F$ f, final G g) {
return new P7() {
public A _1() {
return a;
}
public B _2() {
return b;
}
public C _3() {
return c;
}
public D _4() {
return d;
}
public E _5() {
return e;
}
public F$ _6() {
return f;
}
public G _7() {
return g;
}
};
}
/**
* A function that puts an element in a product-8.
*
* @return A function that puts an element in a product-8.
*/
public static F>>>>>>>> p8() {
return new F>>>>>>>>() {
public F>>>>>>> f(final A a) {
return new F>>>>>>>() {
public F>>>>>> f(final B b) {
return new F>>>>>>() {
public F>>>>> f(final C c) {
return new F>>>>>() {
public F>>>> f(final D d) {
return new F>>>>() {
public F>>> f(final E e) {
return new F>>>() {
public F>> f(final F$ f) {
return new F>>() {
public F> f(final G g) {
return new F>() {
public P8 f(final H h) {
return p(a, b, c, d, e, f, g, h);
}
};
}
};
}
};
}
};
}
};
}
};
}
};
}
};
}
/**
* A function that puts elements in a product-8.
*
* @param a An element.
* @param b An element.
* @param c An element.
* @param d An element.
* @param e An element.
* @param f An element.
* @param g An element.
* @param h An element.
* @return The product-8.
*/
public static P8 p(final A a, final B b, final C c, final D d, final E e, final F$ f, final G g, final H h) {
return new P8() {
public A _1() {
return a;
}
public B _2() {
return b;
}
public C _3() {
return c;
}
public D _4() {
return d;
}
public E _5() {
return e;
}
public F$ _6() {
return f;
}
public G _7() {
return g;
}
public H _8() {
return h;
}
};
}
}