package com.github.java8.lambdasinaction.chap14;
import java.util.function.Function;
public class Combinators {
public static void main(String[] args) {
System.out.println(repeat(3, (Integer x) -> 2 * x).apply(10));
}
static <A, B, C> Function<A, C> compose(Function<B, C> g, Function<A, B> f) {
return x -> g.apply(f.apply(x));
}
static <A> Function<A, A> repeat(int n, Function<A, A> f) {
return n == 0 ? x -> x : compose(f, repeat(n - 1, f));
}
}