Interval.java
package church.lang;

import java.util.function.Function;

public class Interval {
    public final int min;
    public final int max;

    public Interval(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public <U> U reduce(U identity, Function<U, Function<Integer, U>> accumulator) {
        U result = identity;
        for (int i = min; i < max; i++) {
            result = accumulator.apply(result).apply(i);
        }
        return result;
    }
}