Fn2Chain.java

  1. package no.motif.f.combine;

  2. import no.motif.f.Fn;
  3. import no.motif.f.Fn2;

  4. public class Fn2Chain<I1, I2, T, O> implements Fn2<I1, I2, O> {

  5.     private final Fn2<I1, I2, T> first;
  6.     private final Fn<? super T, O> second;

  7.     public Fn2Chain(Fn2<I1, I2, T> first, Fn<? super T, O> second) {
  8.         this.first = first;
  9.         this.second = second;
  10.     }

  11.     public <N> Fn2Chain<I1, I2, O, N> then(Fn<? super O, N> next) {
  12.         return new Fn2Chain<>(this, next);
  13.     }

  14.     @Override
  15.     public O $(I1 v1, I2 v2) {
  16.         return second.$(first.$(v1, v2));
  17.     }

  18. }