package net.varkhan.base.functor.curry; import net.varkhan.base.functor._; /** * <b></b>. * <p/> * * @author varkhan * @date 12/1/13 * @time 12:48 PM */ public interface CPair<L,R> extends Pair<L,R>, CTuple<L,_<R,_>>, _<L,_<R,_>> { public Class<L> ltype(); public L lvalue(); public Class<R> rtype(); public R rvalue(); public Class<?>[] types(); public Object[] values(); public static class Value<L,R> extends CTuple.Value<L,_<R,_>> implements CPair<L,R> { public Value(CPair<L,R> t) { super(t); } public Value(Class<L> lc, Class<R> rc, L l, R r) { super(new Class[]{lc,rc}, new Object[]{l,r}); } @SuppressWarnings("unchecked") public Class<R> rtype() { return (Class<R>) types[1]; } @SuppressWarnings("unchecked") public R rvalue() { return (R) values[1]; } } }