Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package fmlist;
- import fj.F;
- import fj.F2;
- import fj.F3;
- import fj.F4;
- import fj.F5;
- import fj.Monoid;
- abstract class TransformCSFunc<A, B, S> {
- abstract <M> M f(Monoid<M> m, F<B, M> f, A e, F2<M, S, M> c, S i);
- <M> F<S, M> f(Monoid<M> m, F<B, M> f, A e, F2<M, S, M> c) {
- final TransformCSFunc<A, B, S> self = this;
- final Monoid<M> m_ = m;
- final F<B, M> f_ = f;
- final A e_ = e;
- final F2<M, S, M> c_ = c;
- return new F<S, M>() {
- @Override
- public M f(S a) {
- return self.f(m_, f_, e_, c_, a);
- }
- };
- }
- <M> F2<F2<M, S, M>, S, M> f(Monoid<M> m, F<B, M> f, A e) {
- final TransformCSFunc<A, B, S> self = this;
- final Monoid<M> m_ = m;
- final F<B, M> f_ = f;
- final A e_ = e;
- return new F2<F2<M, S, M>, S, M>() {
- @Override
- public M f(F2<M, S, M> a, S b) {
- return self.f(m_, f_, e_, a, b);
- }
- };
- }
- <M> F3<A, F2<M, S, M>, S, M> f(Monoid<M> m, F<B, M> f) {
- final TransformCSFunc<A, B, S> self = this;
- final Monoid<M> m_ = m;
- final F<B, M> f_ = f;
- return new F3<A, F2<M, S, M>, S, M>() {
- @Override
- public M f(A a, F2<M, S, M> b, S c) {
- return self.f(m_, f_, a, b, c);
- }
- };
- }
- <M> F4<F<B, M>, A, F2<M, S, M>, S, M> f(Monoid<M> m) {
- final TransformCSFunc<A, B, S> self = this;
- final Monoid<M> m_ = m;
- return new F4<F<B, M>, A, F2<M, S, M>, S, M>() {
- @Override
- public M f(F<B, M> a, A b, F2<M, S, M> c, S d) {
- return self.f(m_, a, b, c, d);
- }
- };
- }
- <M> F5<Monoid<M>, F<B, M>, A, F2<M, S, M>, S, M> f() {
- final TransformCSFunc<A, B, S> self = this;
- return new F5<Monoid<M>, F<B, M>, A, F2<M, S, M>, S, M>() {
- @Override
- public M f(Monoid<M> a, F<B, M> b, A c, F2<M, S, M> d, S e) {
- return self.f(a, b, c, d, e);
- }
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement