Skip to content

Commit 985a1cf

Browse files
committed
#55 Added map and contramap for F and F2
1 parent 8c95805 commit 985a1cf

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

core/src/main/java/fj/F1Functions.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,4 +840,12 @@ static public <A, B, E extends Exception> F<A, Validation<E, B>> toF1(final TryC
840840
};
841841
}
842842

843+
static public <A, B, C> F<A, C> map(F<A, B> target, F<B, C> f) {
844+
return andThen(target, f);
845+
}
846+
847+
static public <A, B, C> F<C, B> contramap(F<A, B> target, F<C, A> f) {
848+
return andThen(f, target);
849+
}
850+
843851
}

core/src/main/java/fj/F2Functions.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,4 +363,20 @@ static public <A, B, C, E extends Exception> F2<A, B, Validation<E, C>> toF2(fin
363363
};
364364
}
365365

366+
static public <A, B, C, Z> F2<Z, B, C> contramapFirst(F2<A, B, C> target, F<Z, A> f) {
367+
return (z, b) -> target.f(f.f(z), b);
368+
}
369+
370+
static public <A, B, C, Z> F2<A, Z, C> contramapSecond(F2<A, B, C> target, F<Z, B> f) {
371+
return (a, z) -> target.f(a, f.f(z));
372+
}
373+
374+
static public <A, B, C, X, Y> F2<X, Y, C> contramap(F2<A, B, C> target, F<X, A> f, F<Y, B> g) {
375+
return contramapSecond(contramapFirst(target, f), g);
376+
}
377+
378+
static public <A, B, C, Z> F2<A, B, Z> map(F2<A, B, C> target, F<C, Z> f) {
379+
return (a, b) -> f.f(target.f(a, b));
380+
}
381+
366382
}

0 commit comments

Comments
 (0)