Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package fmlist;
- import fj.F;
- import fj.F2;
- import fj.Monoid;
- abstract class TransformFunc<A, B> {
- abstract <M> M f(Monoid<M> monoid, F<A, M> func, B val);
- <M> F<B, M> f(Monoid<M> monoid, F<A, M> func) {
- final Monoid<M> qm = monoid;
- final F<A, M> fn = func;
- final TransformFunc<A, B> self = this;
- return new F<B, M>() {
- @Override
- public M f(B a) {
- return self.f(qm, fn, a);
- }
- };
- }
- <M> F<F<A, M>, F<B, M>> f(Monoid<M> monoid) {
- final Monoid<M> qm = monoid;
- final TransformFunc<A, B> self = this;
- return new F<F<A, M>, F<B, M>>() {
- @Override
- public F<B, M> f(F<A, M> a) {
- final F<A, M> fn = a;
- return new F<B, M>() {
- @Override
- public M f(B a) {
- return self.f(qm, fn, a);
- }
- };
- }
- };
- }
- <M> F2<Monoid<M>, F<A, M>, F<B, M>> f() {
- final TransformFunc<A, B> self = this;
- return new F2<Monoid<M>, F<A, M>, F<B, M>>() {
- @Override
- public F<B, M> f(Monoid<M> a, F<A, M> b) {
- final Monoid<M> qm = a;
- final F<A, M> fn = b;
- return new F<B, M>() {
- @Override
- public M f(B a) {
- return self.f(qm, fn, a);
- }
- };
- }
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement