Skip to content

Commit 5646ec6

Browse files
committed
Introducing Discard and using it to make a generic Apply function.
1 parent 766fc4d commit 5646ec6

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using static Funcky.Discard;
2+
3+
namespace Funcky.Test.Extensions.FuncExtensions;
4+
5+
public class ApplyTest
6+
{
7+
[Fact]
8+
public void Test()
9+
{
10+
var func = Linear0;
11+
12+
var f1 = ((Func<int, int, int, int>)Linear0).Apply(_, _, 10);
13+
var f2 = func.Apply(2, _, 7);
14+
var f3 = Funcky.Extensions.FuncExtensions.Apply<int, int, int, int>(Linear0, _, _, 42);
15+
16+
Assert.Equal(30, f1(10, 2));
17+
Assert.Equal(72, f2(10));
18+
}
19+
20+
[Fact]
21+
public void Test2()
22+
{
23+
}
24+
25+
private static int Linear0(int a, int b, int c)
26+
=> a + (b * c);
27+
28+
private int Function(int x)
29+
{
30+
return _ switch
31+
{
32+
_ when x == 3 => 0,
33+
_ => 1,
34+
};
35+
}
36+
}
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace Funcky.Extensions;
2+
3+
public static partial class FuncExtensions
4+
{
5+
public static Func<T2, T3, TResult> Apply<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function, T1 arg1, Unit arg2, Unit arg3)
6+
=> (a2, a3) => function(arg1, a2, a3);
7+
8+
public static Func<T1, T3, TResult> Apply<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function, Unit arg1, T2 arg2, Unit arg3)
9+
=> (a1, a3) => function(a1, arg2, a3);
10+
11+
public static Func<T3, TResult> Apply<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function, T1 arg1, T2 arg2, Unit arg3)
12+
=> a3 => function(arg1, arg2, a3);
13+
14+
public static Func<T1, T2, TResult> Apply<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function, Unit arg1, Unit arg2, T3 arg3)
15+
=> (a1, a2) => function(a1, a2, arg3);
16+
17+
public static Func<T2, TResult> Apply<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function, T1 arg1, Unit arg2, T3 arg3)
18+
=> a2 => function(arg1, a2, arg3);
19+
20+
public static Func<T1, TResult> Apply<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function, Unit arg1, T2 arg2, T3 arg3)
21+
=> a1 => function(a1, arg2, arg3);
22+
}

Funcky/Functional/Discard.cs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma warning disable SA1300
2+
#pragma warning disable SA1649
3+
4+
namespace Funcky;
5+
6+
public class Discard
7+
{
8+
public static readonly Unit _ = Unit.Value;
9+
public static readonly Unit __ = Unit.Value;
10+
}

Funcky/PublicAPI.Unshipped.txt

+10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
#nullable enable
2+
Funcky.Discard
3+
Funcky.Discard.Discard() -> void
24
Funcky.RequireClass<T>
35
Funcky.RequireClass<T>.RequireClass() -> void
46
Funcky.RequireStruct<T>
57
Funcky.RequireStruct<T>.RequireStruct() -> void
68
static Funcky.Extensions.EnumerableExtensions.ElementAtOrNone<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, System.Index index) -> Funcky.Monads.Option<TSource>
9+
static Funcky.Extensions.FuncExtensions.Apply<T1, T2, T3, TResult>(this System.Func<T1, T2, T3, TResult>! function, Funcky.Unit arg1, Funcky.Unit arg2, T3 arg3) -> System.Func<T1, T2, TResult>!
10+
static Funcky.Extensions.FuncExtensions.Apply<T1, T2, T3, TResult>(this System.Func<T1, T2, T3, TResult>! function, Funcky.Unit arg1, T2 arg2, Funcky.Unit arg3) -> System.Func<T1, T3, TResult>!
11+
static Funcky.Extensions.FuncExtensions.Apply<T1, T2, T3, TResult>(this System.Func<T1, T2, T3, TResult>! function, Funcky.Unit arg1, T2 arg2, T3 arg3) -> System.Func<T1, TResult>!
12+
static Funcky.Extensions.FuncExtensions.Apply<T1, T2, T3, TResult>(this System.Func<T1, T2, T3, TResult>! function, T1 arg1, Funcky.Unit arg2, Funcky.Unit arg3) -> System.Func<T2, T3, TResult>!
13+
static Funcky.Extensions.FuncExtensions.Apply<T1, T2, T3, TResult>(this System.Func<T1, T2, T3, TResult>! function, T1 arg1, Funcky.Unit arg2, T3 arg3) -> System.Func<T2, TResult>!
14+
static Funcky.Extensions.FuncExtensions.Apply<T1, T2, T3, TResult>(this System.Func<T1, T2, T3, TResult>! function, T1 arg1, T2 arg2, Funcky.Unit arg3) -> System.Func<T3, TResult>!
715
static Funcky.Extensions.ParseExtensions.ParseBigIntegerOrNone(this string? candidate, System.IFormatProvider? provider) -> Funcky.Monads.Option<System.Numerics.BigInteger>
816
static Funcky.Extensions.ParseExtensions.ParseBigIntegerOrNone(this System.ReadOnlySpan<char> candidate, System.IFormatProvider? provider) -> Funcky.Monads.Option<System.Numerics.BigInteger>
917
static Funcky.Extensions.ParseExtensions.ParseByteOrNone(this string? candidate, System.IFormatProvider? provider) -> Funcky.Monads.Option<byte>
@@ -43,3 +51,5 @@ static Funcky.Extensions.QueryableExtensions.ElementAtOrNone<TSource>(this Syste
4351
static Funcky.Extensions.StreamExtensions.ReadByteOrNone(this System.IO.Stream! stream) -> Funcky.Monads.Option<byte>
4452
static Funcky.Monads.OptionExtensions.ToNullable<TItem>(this Funcky.Monads.Option<TItem!> option, Funcky.RequireClass<TItem!>? ω = null) -> TItem?
4553
static Funcky.Monads.OptionExtensions.ToNullable<TItem>(this Funcky.Monads.Option<TItem> option, Funcky.RequireStruct<TItem>? ω = null) -> TItem?
54+
static readonly Funcky.Discard._ -> Funcky.Unit
55+
static readonly Funcky.Discard.__ -> Funcky.Unit

0 commit comments

Comments
 (0)