Advertisement
PthariensFlame

TransformFunc.java

Feb 4th, 2012
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.56 KB | None | 0 0
  1. package fmlist;
  2.  
  3. import fj.F;
  4. import fj.F2;
  5. import fj.Monoid;
  6.  
  7. abstract class TransformFunc<A, B> {
  8.  
  9.     abstract <M> M f(Monoid<M> monoid, F<A, M> func, B val);
  10.  
  11.     <M> F<B, M> f(Monoid<M> monoid, F<A, M> func) {
  12.         final Monoid<M> qm = monoid;
  13.         final F<A, M> fn = func;
  14.         final TransformFunc<A, B> self = this;
  15.         return new F<B, M>() {
  16.  
  17.             @Override
  18.             public M f(B a) {
  19.                 return self.f(qm, fn, a);
  20.             }
  21.         };
  22.     }
  23.  
  24.     <M> F<F<A, M>, F<B, M>> f(Monoid<M> monoid) {
  25.         final Monoid<M> qm = monoid;
  26.         final TransformFunc<A, B> self = this;
  27.         return new F<F<A, M>, F<B, M>>() {
  28.  
  29.             @Override
  30.             public F<B, M> f(F<A, M> a) {
  31.                 final F<A, M> fn = a;
  32.                 return new F<B, M>() {
  33.  
  34.                     @Override
  35.                     public M f(B a) {
  36.                         return self.f(qm, fn, a);
  37.                     }
  38.                 };
  39.             }
  40.         };
  41.     }
  42.  
  43.     <M> F2<Monoid<M>, F<A, M>, F<B, M>> f() {
  44.         final TransformFunc<A, B> self = this;
  45.         return new F2<Monoid<M>, F<A, M>, F<B, M>>() {
  46.  
  47.             @Override
  48.             public F<B, M> f(Monoid<M> a, F<A, M> b) {
  49.                 final Monoid<M> qm = a;
  50.                 final F<A, M> fn = b;
  51.                 return new F<B, M>() {
  52.  
  53.                     @Override
  54.                     public M f(B a) {
  55.                         return self.f(qm, fn, a);
  56.                     }
  57.                 };
  58.             }
  59.         };
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement