package fmlist; import fj.F; import fj.F2; import fj.F3; import fj.F4; import fj.F5; import fj.Monoid; abstract class TransformCSFunc { abstract M f(Monoid m, F f, A e, F2 c, S i); F f(Monoid m, F f, A e, F2 c) { final TransformCSFunc self = this; final Monoid m_ = m; final F f_ = f; final A e_ = e; final F2 c_ = c; return new F() { @Override public M f(S a) { return self.f(m_, f_, e_, c_, a); } }; } F2, S, M> f(Monoid m, F f, A e) { final TransformCSFunc self = this; final Monoid m_ = m; final F f_ = f; final A e_ = e; return new F2, S, M>() { @Override public M f(F2 a, S b) { return self.f(m_, f_, e_, a, b); } }; } F3, S, M> f(Monoid m, F f) { final TransformCSFunc self = this; final Monoid m_ = m; final F f_ = f; return new F3, S, M>() { @Override public M f(A a, F2 b, S c) { return self.f(m_, f_, a, b, c); } }; } F4, A, F2, S, M> f(Monoid m) { final TransformCSFunc self = this; final Monoid m_ = m; return new F4, A, F2, S, M>() { @Override public M f(F a, A b, F2 c, S d) { return self.f(m_, a, b, c, d); } }; } F5, F, A, F2, S, M> f() { final TransformCSFunc self = this; return new F5, F, A, F2, S, M>() { @Override public M f(Monoid a, F b, A c, F2 d, S e) { return self.f(a, b, c, d, e); } }; } }