@SafeVarargs
    public static <T, U, R> BiFunction<T, U, Optional<R>> maybeFirstMatch(BinaryClause<T, U, R>... clauses) {
        final List<Clause<Pair<T, U>, R>> unaryClauses = Sequences.of(clauses).map(BinaryClause::tupled).toList();
        return Pairs.untupled(new MaybeFirstMatchStrategy<>(unaryClauses));
    }
@ SafeVarargs public static < T , U , R > BiFunction < T , U , Optional < R > > maybeFirstMatch ( BinaryClause < T , U , R > ... clauses ) { final List < Clause < Pair < T , U > , R > > unaryClauses = Sequences . of ( clauses ) . map ( BinaryClause :: tupled ) . toList ( ) ; return Pairs . untupled ( new MaybeFirstMatchStrategy < > ( unaryClauses ) ) ; }
Given some {@code Clause}s returns a binary function that forwards the result of
the first clause which condition is true, of an empty {@code Optional} if
no clause matches the condition.