public class Compose {
// Java doesn't have function type so we define an interface
// of function objects instead
public interface Fun {
B call(A x);
}
public static Fun compose(final Fun f, final Fun g) {
return new Fun() {
public C call(A x) {
return f.call(g.call(x));
}
};
}
public static void main(String[] args) {
Fun sin = new Fun() {
public Double call(Double x) {
return Math.sin(x);
}
};
Fun asin = new Fun() {
public Double call(Double x) {
return Math.asin(x);
}
};
Fun sin_asin = compose(sin, asin);
System.out.println(sin_asin.call(0.5)); // prints "0.5"
}
}