package fmlist; import fj.F; import fj.F2; import fj.Monoid; abstract class TransformFunc { abstract M f(Monoid monoid, F func, B val); F f(Monoid monoid, F func) { final Monoid qm = monoid; final F fn = func; final TransformFunc self = this; return new F() { @Override public M f(B a) { return self.f(qm, fn, a); } }; } F, F> f(Monoid monoid) { final Monoid qm = monoid; final TransformFunc self = this; return new F, F>() { @Override public F f(F a) { final F fn = a; return new F() { @Override public M f(B a) { return self.f(qm, fn, a); } }; } }; } F2, F, F> f() { final TransformFunc self = this; return new F2, F, F>() { @Override public F f(Monoid a, F b) { final Monoid qm = a; final F fn = b; return new F() { @Override public M f(B a) { return self.f(qm, fn, a); } }; } }; } }