// Path: src/main/java/ch/codebulb/lambdaomega/abstractions/functions/DoubleBiFunction.java
// @FunctionalInterface
// public interface DoubleBiFunction<R> {
// 
//     /**
//      * Applies this function to the given arguments.
//      *
//      * @param t the first function argument
//      * @param u the second function argument
//      * @return the function result
//      */
//     R apply(double t, double u);
//     
// }
// 
// Path: src/main/java/ch/codebulb/lambdaomega/abstractions/functions/IntBiFunction.java
// @FunctionalInterface
// public interface IntBiFunction<R> {
// 
//     /**
//      * Applies this function to the given arguments.
//      *
//      * @param t the first function argument
//      * @param u the second function argument
//      * @return the function result
//      */
//     R apply(int t, int u);
//     
// }
// 
// Path: src/main/java/ch/codebulb/lambdaomega/abstractions/functions/LongBiFunction.java
// @FunctionalInterface
// public interface LongBiFunction<R> {
// 
//     /**
//      * Applies this function to the given arguments.
//      *
//      * @param t the first function argument
//      * @param u the second function argument
//      * @return the function result
//      */
//     R apply(long t, long u);
//     
// }


import ch.codebulb.lambdaomega.abstractions.functions.DoubleBiFunction;
import ch.codebulb.lambdaomega.abstractions.functions.IntBiFunction;
import ch.codebulb.lambdaomega.abstractions.functions.LongBiFunction;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
import java.util.function.BinaryOperator;
import java.util.function.DoubleBinaryOperator;
import java.util.function.IntBinaryOperator;
import java.util.function.LongBinaryOperator;
import java.util.function.ObjDoubleConsumer;
import java.util.function.ObjIntConsumer;
import java.util.function.ObjLongConsumer;
import java.util.function.ToDoubleBiFunction;
import java.util.function.ToIntBiFunction;
import java.util.function.ToLongBiFunction;
package ch.codebulb.lambdaomega.abstractions;


/**
 * A multi-interface providing a single unified API for all 2-ary {@link FunctionalInterface}s of Java 8 and LambdaOmega.
 * Implement / use {@link #call(Object, Object)} / {@link #call()} to call this function.<p/>
 * 
 * Note: {@link BinaryOperator} is not covered by this interface as it is mutually incompatible with {@link BiFunction}.
 * 
 * @param <T> the type of the first argument to the function
 * @param <U> the type of the second argument to the function
 * @param <R> the type of the result of the function
 */
@FunctionalInterface
public interface BiFunctionalI<T, U, R> extends BiFunction<T, U, R>, BiConsumer<T, U>, BiPredicate<T, U>,
        IntBinaryOperator, LongBinaryOperator, DoubleBinaryOperator,
// Path: src/main/java/ch/codebulb/lambdaomega/abstractions/functions/DoubleBiFunction.java
// @FunctionalInterface
// public interface DoubleBiFunction<R> {
// 
//     /**
//      * Applies this function to the given arguments.
//      *
//      * @param t the first function argument
//      * @param u the second function argument
//      * @return the function result
//      */
//     R apply(double t, double u);
//     
// }
// 
// Path: src/main/java/ch/codebulb/lambdaomega/abstractions/functions/IntBiFunction.java
// @FunctionalInterface
// public interface IntBiFunction<R> {
// 
//     /**
//      * Applies this function to the given arguments.
//      *
//      * @param t the first function argument
//      * @param u the second function argument
//      * @return the function result
//      */
//     R apply(int t, int u);
//     
// }
// 
// Path: src/main/java/ch/codebulb/lambdaomega/abstractions/functions/LongBiFunction.java
// @FunctionalInterface
// public interface LongBiFunction<R> {
// 
//     /**
//      * Applies this function to the given arguments.
//      *
//      * @param t the first function argument
//      * @param u the second function argument
//      * @return the function result
//      */
//     R apply(long t, long u);
//     
// }


// Path: src/main/java/ch/codebulb/lambdaomega/abstractions/BiFunctionalI.java
import ch.codebulb.lambdaomega.abstractions.functions.DoubleBiFunction;
import ch.codebulb.lambdaomega.abstractions.functions.IntBiFunction;
import ch.codebulb.lambdaomega.abstractions.functions.LongBiFunction;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
import java.util.function.BinaryOperator;
import java.util.function.DoubleBinaryOperator;
import java.util.function.IntBinaryOperator;
import java.util.function.LongBinaryOperator;
import java.util.function.ObjDoubleConsumer;
import java.util.function.ObjIntConsumer;
import java.util.function.ObjLongConsumer;
import java.util.function.ToDoubleBiFunction;
import java.util.function.ToIntBiFunction;
import java.util.function.ToLongBiFunction;

package ch.codebulb.lambdaomega.abstractions;


/**
 * A multi-interface providing a single unified API for all 2-ary {@link FunctionalInterface}s of Java 8 and LambdaOmega.
 * Implement / use {@link #call(Object, Object)} / {@link #call()} to call this function.<p/>
 * 
 * Note: {@link BinaryOperator} is not covered by this interface as it is mutually incompatible with {@link BiFunction}.
 * 
 * @param <T> the type of the first argument to the function
 * @param <U> the type of the second argument to the function
 * @param <R> the type of the result of the function
 */
@FunctionalInterface
public interface BiFunctionalI<T, U, R> extends BiFunction<T, U, R>, BiConsumer<T, U>, BiPredicate<T, U>,
        IntBinaryOperator, LongBinaryOperator, DoubleBinaryOperator,
        IntBiFunction<R>, LongBiFunction<R>, DoubleBiFunction<R>,