@SafeVarargs
    public static <T, R> Function<T, R> firstMatch(Clause<T, R>... clauses) {
        return new FirstMatchStrategy<>(Arrays.asList(clauses));
    }
@ SafeVarargs public static < T , R > Function < T , R > firstMatch ( Clause < T , R > ... clauses ) { return new FirstMatchStrategy < > ( Arrays . asList ( clauses ) ) ; }
Given some {@code Clause}s returns a function that forwards the result of the
first clause which condition is true.

@throws IllegalStateException if no clause matches the condition