Mercurial > hg > Members > tatsuki > functionaljava-master > core
diff src/main/java/fj/Effect.java @ 0:fe80c1edf1be
add getLoop
author | tatsuki |
---|---|
date | Fri, 20 Mar 2015 21:04:03 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/fj/Effect.java Fri Mar 20 21:04:03 2015 +0900 @@ -0,0 +1,113 @@ +package fj; + +import fj.function.Effect0; +import fj.function.Effect1; +import fj.function.Effect2; +import fj.function.Effect3; +import fj.function.Effect4; +import fj.function.Effect5; +import fj.function.Effect6; +import fj.function.Effect7; +import fj.function.Effect8; + +import static fj.Unit.unit; + +/** + * Represents a side-effect. + * + * @version %build.number% + */ +public class Effect { + + private Effect() {} + + public static P1<Unit> f(Effect0 e) { + return P.lazy(u -> unit()); + } + + /** + * Returns a function for the given effect. + * + * @return The function using the given effect. + */ + public static final <A> F<A, Unit> f(Effect1<A> e1) { + return a -> { + e1.f(a); + return unit(); + }; + } + + public static <A, B> F2<A, B, Unit> f(Effect2<A, B> e) { + return (a, b) -> { + e.f(a, b); + return unit(); + }; + } + + public static <A, B, C> F3<A, B, C, Unit> f(Effect3<A, B, C> e) { + return (a, b, c) -> { + e.f(a, b, c); + return unit(); + }; + } + + public static <A, B, C, D> F4<A, B, C, D, Unit> f(Effect4<A, B, C, D> e) { + return (a, b, c, d) -> { + e.f(a, b, c, d); + return unit(); + }; + } + + public static <A, B, C, D, E> F5<A, B, C, D, E, Unit> f(Effect5<A, B, C, D, E> z) { + return (a, b, c, d, e) -> { + z.f(a, b, c, d, e); + return unit(); + }; + } + + public static <A, B, C, D, E, $F> F6<A, B, C, D, E, $F, Unit> f(Effect6<A, B, C, D, E, $F> z) { + return (a, b, c, d, e, f) -> { + z.f(a, b, c, d, e, f); + return unit(); + }; + } + + public static <A, B, C, D, E, $F, G> F7<A, B, C, D, E, $F, G, Unit> f(Effect7<A, B, C, D, E, $F, G> z) { + return (a, b, c, d, e, f, g) -> { + z.f(a, b, c, d, e, f, g); + return unit(); + }; + } + + public static <A, B, C, D, E, $F, G, H> F8<A, B, C, D, E, $F, G, H, Unit> f(Effect8<A, B, C, D, E, $F, G, H> z) { + return (a, b, c, d, e, f, g, h) -> { + z.f(a, b, c, d, e, f, g, h); + return unit(); + }; + } + + /** + * A contra-variant functor on effect. + * + * @param f The function to map over the effect. + * @return An effect after a contra-variant map. + */ + public final <A, B> Effect1<B> comap(Effect1<A> e1, final F<B, A> f) { + return new Effect1<B>() { + public void f(final B b) { + e1.f(f.f(b)); + } + }; + } + + public static <A> Effect1<A> lazy(final F<A, Unit> f) { + return new Effect1<A>() { + public void f(final A a) { + f.f(a); + } + }; + } + +// public static <A> void f(Effect1<A> ) + +}