add curry and uncurry functions

This commit is contained in:
dfsek
2026-01-03 04:13:21 -07:00
parent aa3fe18339
commit 65eb66c3ca

View File

@@ -2,10 +2,13 @@ package com.dfsek.terra.api.util.function;
import com.dfsek.terra.api.util.generic.data.types.Either;
import com.dfsek.terra.api.util.generic.data.types.Pair;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -56,7 +59,28 @@ public final class FunctionUtils {
};
}
public static <T> T construct(Supplier<T> in) {
return in.get();
@Contract(pure = true, value = "_ -> new")
public static <T, U, R> @NotNull Function<Pair<T, U>, R> tuple(@NotNull BiFunction<T, U, R> f) {
return p -> f.apply(p.left(), p.right());
}
@Contract(pure = true, value = "_ -> new")
public static <T, U, R> @NotNull BiFunction<T, U, R> untuple(@NotNull Function<Pair<T, U>, R> f) {
return (a, b) -> f.apply(Pair.of(a, b));
}
@Contract(pure = true, value = "_ -> new")
public static <T, U, R> @NotNull Function<T, Function<U, R>> curry(@NotNull BiFunction<T, U, R> f) {
return a -> b -> f.apply(a, b);
}
@Contract(pure = true, value = "_ -> new")
public static <T, U, R> @NotNull BiFunction<T, U, R> uncurry(@NotNull Function<T, Function<U, R>> f) {
return (a, b) -> f.apply(a).apply(b);
}
@Contract(pure = true, value = "_ -> new")
public static <T> @NotNull T construct(@NotNull Supplier<T> in) {
return Objects.requireNonNull(Objects.requireNonNull(in).get());
}
}