From 65eb66c3cac8b9171be9736b390422abf7f64e46 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 3 Jan 2026 04:13:21 -0700 Subject: [PATCH] add curry and uncurry functions --- .../api/util/function/FunctionUtils.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/function/FunctionUtils.java b/common/api/src/main/java/com/dfsek/terra/api/util/function/FunctionUtils.java index ad9fa94c9..795f136d1 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/function/FunctionUtils.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/function/FunctionUtils.java @@ -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 construct(Supplier in) { - return in.get(); + @Contract(pure = true, value = "_ -> new") + public static @NotNull Function, R> tuple(@NotNull BiFunction f) { + return p -> f.apply(p.left(), p.right()); + } + + @Contract(pure = true, value = "_ -> new") + public static @NotNull BiFunction untuple(@NotNull Function, R> f) { + return (a, b) -> f.apply(Pair.of(a, b)); + } + + @Contract(pure = true, value = "_ -> new") + public static @NotNull Function> curry(@NotNull BiFunction f) { + return a -> b -> f.apply(a, b); + } + + @Contract(pure = true, value = "_ -> new") + public static @NotNull BiFunction uncurry(@NotNull Function> f) { + return (a, b) -> f.apply(a).apply(b); + } + + @Contract(pure = true, value = "_ -> new") + public static @NotNull T construct(@NotNull Supplier in) { + return Objects.requireNonNull(Objects.requireNonNull(in).get()); } }