diff --git a/Funcky.Test/FunctionalClass/ApplyTest.cs b/Funcky.Test/FunctionalClass/ApplyTest.cs new file mode 100644 index 00000000..d8331723 --- /dev/null +++ b/Funcky.Test/FunctionalClass/ApplyTest.cs @@ -0,0 +1,28 @@ +using static Funcky.Discard; + +namespace Funcky.Test.Extensions.FuncExtensions; + +public class ApplyTest +{ + [Fact] + public void CanApplyParametersInAnyOrder() + { + var func = Linear0; + + var f1 = ((Func)Linear0).Apply(__, __, 10); + var f2 = func.Apply(2, __, 7); + var f3 = Funcky.Extensions.FuncExtensions.Apply(Linear0, __, __, 42); + + Assert.Equal(30, f1(10, 2)); + Assert.Equal(72, f2(10)); + Assert.Equal(30, f3(10, 2)); + } + + [Fact] + public void Test2() + { + } + + private static int Linear0(int a, int b, int c) + => a + (b * c); +} diff --git a/Funcky/Extensions/FuncExtensions/Apply.cs b/Funcky/Extensions/FuncExtensions/Apply.cs new file mode 100644 index 00000000..45c45efb --- /dev/null +++ b/Funcky/Extensions/FuncExtensions/Apply.cs @@ -0,0 +1,30 @@ +namespace Funcky.Extensions; + +public static partial class FuncExtensions +{ + // All overloads for Fuctions with 2 paramters. + public static Func Apply(this Func function, Unit arg1, T2 arg2) + => (a1) => function(a1, arg2); + + public static Func Apply(this Func function, T1 arg1, Unit arg2) + => (a2) => function(arg1, a2); + + // All overloads for Fuctions with 3 paramters. + public static Func Apply(this Func function, T1 arg1, Unit arg2, Unit arg3) + => (a2, a3) => function(arg1, a2, a3); + + public static Func Apply(this Func function, Unit arg1, T2 arg2, Unit arg3) + => (a1, a3) => function(a1, arg2, a3); + + public static Func Apply(this Func function, Unit arg1, Unit arg2, T3 arg3) + => (a1, a2) => function(a1, a2, arg3); + + public static Func Apply(this Func function, T1 arg1, T2 arg2, Unit arg3) + => a3 => function(arg1, arg2, a3); + + public static Func Apply(this Func function, T1 arg1, Unit arg2, T3 arg3) + => a2 => function(arg1, a2, arg3); + + public static Func Apply(this Func function, Unit arg1, T2 arg2, T3 arg3) + => a1 => function(a1, arg2, arg3); +} diff --git a/Funcky/PublicAPI.Unshipped.txt b/Funcky/PublicAPI.Unshipped.txt index 7dc5c581..41b0339d 100644 --- a/Funcky/PublicAPI.Unshipped.txt +++ b/Funcky/PublicAPI.Unshipped.txt @@ -1 +1,9 @@ #nullable enable +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, Funcky.Unit arg1, Funcky.Unit arg2, T3 arg3) -> System.Func! +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, Funcky.Unit arg1, T2 arg2, Funcky.Unit arg3) -> System.Func! +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, Funcky.Unit arg1, T2 arg2, T3 arg3) -> System.Func! +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, T1 arg1, Funcky.Unit arg2, Funcky.Unit arg3) -> System.Func! +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, T1 arg1, Funcky.Unit arg2, T3 arg3) -> System.Func! +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, T1 arg1, T2 arg2, Funcky.Unit arg3) -> System.Func! +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, Funcky.Unit arg1, T2 arg2) -> System.Func! +static Funcky.Extensions.FuncExtensions.Apply(this System.Func! function, T1 arg1, Funcky.Unit arg2) -> System.Func!