1 33 package net.sf.jga.fn; 34 35 import java.io.Serializable ; 36 import net.sf.jga.fn.adaptor.Bind; 37 import net.sf.jga.fn.adaptor.ChainBinary; 38 import net.sf.jga.fn.adaptor.ChainUnary; 39 import net.sf.jga.fn.adaptor.Generate; 40 import net.sf.jga.fn.adaptor.Identity; 41 42 50 51 abstract public class UnaryFunctor<T, R> extends Functor<R> implements Serializable , Visitable { 52 55 abstract public R fn(T arg); 56 57 63 public <F> UnaryFunctor<F,R> compose(UnaryFunctor<F,T> f) { 64 return new ChainUnary<F,T,R>(this,f); 65 } 66 67 73 public <F1,F2> BinaryFunctor<F1,F2,R> compose(BinaryFunctor<F1,F2,T> f) { 74 return new ChainBinary<F1,F2,T,R>(this, f); 75 } 76 77 82 83 public Generator<R> generate(Generator<T> gen) { 84 return new Generate<T,R>(this, gen); 85 } 86 87 92 93 public Generator<R> bind(T val) { 94 return new Bind<T,R>(val, this); 95 } 96 97 101 104 public R eval(Object ... args) { 105 return fn((T) args[0]); 110 } 111 112 116 119 public void accept(Visitor v) {} 120 } 121 122 | Popular Tags |