nus/Lab5/cs2030s/fp/Transformer.java
Yadunand Prem 26df644e0d finish
2022-11-08 18:03:39 +08:00

24 lines
572 B
Java

package cs2030s.fp;
public abstract class Transformer<R, P> implements Immutator<R, P> {
public <N> Transformer<R, N> after(Transformer<P, N> g) {
Transformer<R, P> f = this;
return new Transformer<R, N>() {
@Override
public R invoke(N param) {
return f.invoke(g.invoke(param));
}
};
}
public <T> Transformer<T, P> before(Transformer<T, R> g) {
Transformer<R, P> f = this;
return new Transformer<T, P>() {
@Override
public T invoke(P param) {
return g.invoke(f.invoke(param));
}
};
}
}