public static class CompletableFutures.Instances
extends java.lang.Object
Constructor and Description |
---|
Instances() |
Modifier and Type | Method and Description |
---|---|
static <T,R> Applicative<Witness.completableFuture> |
applicative()
import static com.aol.cyclops.hkt.jdk.CompletableFutureKind.widen;
import static com.aol.cyclops.util.function.Lambda.l1;
CompletableFutures.applicative()
.ap(widen(asCompletableFuture(l1(this::multiplyByTwo))),widen(asCompletableFuture(3)));
//[6]
|
static <T> Comonad<Witness.completableFuture> |
comonad() |
static InstanceDefinitions<Witness.completableFuture> |
definitions() |
static <T,R> Foldable<Witness.completableFuture> |
foldable()
int sum = CompletableFutures.foldable()
.foldLeft(0, (a,b)->a+b, CompletableFutureKind.widen(CompletableFuture.completedFuture(3)));
//3
|
static <T,R> Functor<Witness.completableFuture> |
functor()
Transform a future, mulitplying every element by 2
|
static <T,R> Monad<Witness.completableFuture> |
monad()
import static com.aol.cyclops.hkt.jdk.CompletableFutureKind.widen;
CompletableFutureKind<Integer> future = CompletableFutures.monad()
.flatMap(i->widen(CompletableFutureX.range(0,i)), widen(CompletableFuture.completedFuture(3)))
.convert(CompletableFutureKind::narrowK3);
|
static <T> MonadPlus<Witness.completableFuture> |
monadPlus()
CompletableFutureKind<Integer> future = CompletableFutures.<Integer>monadPlus()
.plus(CompletableFutureKind.widen(CompletableFuture.completedFuture()), CompletableFutureKind.widen(CompletableFuture.completedFuture(10)))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture(10))
|
static <T> MonadPlus<Witness.completableFuture> |
monadPlus(Monoid<CompletableFutures.CompletableFutureKind<T>> m)
Monoid<CompletableFutureKind<Integer>> m = Monoid.of(CompletableFutureKind.widen(CompletableFuture.completedFuture()), (a,b)->a.isEmpty() ? b : a);
CompletableFutureKind<Integer> future = CompletableFutures.<Integer>monadPlus(m)
.plus(CompletableFutureKind.widen(CompletableFuture.completedFuture(5)), CompletableFutureKind.widen(CompletableFuture.completedFuture(10)))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture(5))
|
static <T,R> MonadRec<Witness.completableFuture> |
monadRec() |
static <T,R> MonadZero<Witness.completableFuture> |
monadZero()
CompletableFutureKind<String> future = CompletableFutures.unit()
.unit("hello")
.applyHKT(h->CompletableFutures.monadZero().filter((String t)->t.startsWith("he"), h))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture("hello"));
|
static <C2,T> Traverse<Witness.completableFuture> |
traverse() |
static <T> Pure<Witness.completableFuture> |
unit()
CompletableFutureKind<String> future = CompletableFutures.unit()
.unit("hello")
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture("hello"))
|
public static InstanceDefinitions<Witness.completableFuture> definitions()
public static <T,R> Functor<Witness.completableFuture> functor()
CompletableFutureKind<Integer> future = CompletableFutures.functor().map(i->i*2, CompletableFutureKind.widen(CompletableFuture.completedFuture(1,2,3));
//[2,4,6]
An example fluent api working with CompletableFutures
CompletableFutureKind<Integer> future = CompletableFutures.unit()
.unit("hello")
.applyHKT(h->CompletableFutures.functor().map((String v) ->v.length(), h))
.convert(CompletableFutureKind::narrowK3);
public static <T> Pure<Witness.completableFuture> unit()
CompletableFutureKind<String> future = CompletableFutures.unit()
.unit("hello")
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture("hello"))
public static <T,R> Applicative<Witness.completableFuture> applicative()
import static com.aol.cyclops.hkt.jdk.CompletableFutureKind.widen;
import static com.aol.cyclops.util.function.Lambda.l1;
CompletableFutures.applicative()
.ap(widen(asCompletableFuture(l1(this::multiplyByTwo))),widen(asCompletableFuture(3)));
//[6]
Example fluent API
CompletableFutureKind<Function<Integer,Integer>> futureFn =CompletableFutures.unit()
.unit(Lambda.l1((Integer i) ->i*2))
.convert(CompletableFutureKind::narrowK3);
CompletableFutureKind<Integer> future = CompletableFutures.unit()
.unit("hello")
.applyHKT(h->CompletableFutures.functor().map((String v) ->v.length(), h))
.applyHKT(h->CompletableFutures.applicative().ap(futureFn, h))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture("hello".length()*2))
public static <T,R> Monad<Witness.completableFuture> monad()
import static com.aol.cyclops.hkt.jdk.CompletableFutureKind.widen;
CompletableFutureKind<Integer> future = CompletableFutures.monad()
.flatMap(i->widen(CompletableFutureX.range(0,i)), widen(CompletableFuture.completedFuture(3)))
.convert(CompletableFutureKind::narrowK3);
Example fluent API
CompletableFutureKind<Integer> future = CompletableFutures.unit()
.unit("hello")
.applyHKT(h->CompletableFutures.monad().flatMap((String v) ->CompletableFutures.unit().unit(v.length()), h))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture("hello".length())
public static <T,R> MonadZero<Witness.completableFuture> monadZero()
CompletableFutureKind<String> future = CompletableFutures.unit()
.unit("hello")
.applyHKT(h->CompletableFutures.monadZero().filter((String t)->t.startsWith("he"), h))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture("hello"));
public static <T> MonadPlus<Witness.completableFuture> monadPlus()
CompletableFutureKind<Integer> future = CompletableFutures.<Integer>monadPlus()
.plus(CompletableFutureKind.widen(CompletableFuture.completedFuture()), CompletableFutureKind.widen(CompletableFuture.completedFuture(10)))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture(10))
public static <T> MonadPlus<Witness.completableFuture> monadPlus(Monoid<CompletableFutures.CompletableFutureKind<T>> m)
Monoid<CompletableFutureKind<Integer>> m = Monoid.of(CompletableFutureKind.widen(CompletableFuture.completedFuture()), (a,b)->a.isEmpty() ? b : a);
CompletableFutureKind<Integer> future = CompletableFutures.<Integer>monadPlus(m)
.plus(CompletableFutureKind.widen(CompletableFuture.completedFuture(5)), CompletableFutureKind.widen(CompletableFuture.completedFuture(10)))
.convert(CompletableFutureKind::narrowK3);
//CompletableFuture.completedFuture(5))
m
- Monoid to use for combining CompletableFuturespublic static <C2,T> Traverse<Witness.completableFuture> traverse()
public static <T,R> Foldable<Witness.completableFuture> foldable()
int sum = CompletableFutures.foldable()
.foldLeft(0, (a,b)->a+b, CompletableFutureKind.widen(CompletableFuture.completedFuture(3)));
//3
public static <T> Comonad<Witness.completableFuture> comonad()
public static <T,R> MonadRec<Witness.completableFuture> monadRec()