package com.googlecode.totallylazy.functions; import com.googlecode.totallylazy.Pair; public interface Function2<A, B, C> { C call(A a, B b) throws Exception; default C apply(final A a, final B b) { return Functions.call(this, a, b); } default Function2<B, A, C> flip() { return Callables.flip(this); } default Function1<Pair<A, B>, C> pair() { return Callables.pair(this); } default Function1<A, C> applySecond(final B b) { return Callables.flip(this).apply(b); } default Function0<C> deferApply(final A a, final B b) { return Callables.deferApply(this, a, b); } }