-
Notifications
You must be signed in to change notification settings - Fork 0
/
partial.go
127 lines (100 loc) · 2.43 KB
/
partial.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package partial
type fnArg0[A any] func() A
func FnArg0[A any](fn fnArg0[A]) fnArg0[A] {
return fn
}
type fnArg1[A, B any] func(A) B
func FnArg1[A, B any](fn fnArg1[A, B]) fnArg1[A, B] {
return fn
}
func (fn fnArg1[A, B]) P1(a A) fnArg0[B] {
return func() B {
return fn(a)
}
}
type fnArg2[A, B, C any] func(A, B) C
func FnArg2[A, B, C any](fn fnArg2[A, B, C]) fnArg2[A, B, C] {
return fn
}
func (fn fnArg2[A, B, C]) P1(a A) fnArg1[B, C] {
return func(b B) C {
return fn(a, b)
}
}
func (fn fnArg2[A, B, C]) P2(a A, b B) fnArg0[C] {
return func() C {
return fn(a, b)
}
}
type fnArg3[A, B, C, D any] func(A, B, C) D
func FnArg3[A, B, C, D any](fn fnArg3[A, B, C, D]) fnArg3[A, B, C, D] {
return fn
}
func (fn fnArg3[A, B, C, D]) P1(a A) fnArg2[B, C, D] {
return func(b B, c C) D {
return fn(a, b, c)
}
}
func (fn fnArg3[A, B, C, D]) P2(a A, b B) fnArg1[C, D] {
return func(c C) D {
return fn(a, b, c)
}
}
func (fn fnArg3[A, B, C, D]) P3(a A, b B, c C) fnArg0[D] {
return func() D {
return fn(a, b, c)
}
}
type fnArg4[A, B, C, D, E any] func(A, B, C, D) E
func FnArg4[A, B, C, D, E any](fn fnArg4[A, B, C, D, E]) fnArg4[A, B, C, D, E] {
return fn
}
func (fn fnArg4[A, B, C, D, E]) P1(a A) fnArg3[B, C, D, E] {
return func(b B, c C, d D) E {
return fn(a, b, c, d)
}
}
func (fn fnArg4[A, B, C, D, E]) P2(a A, b B) fnArg2[C, D, E] {
return func(c C, d D) E {
return fn(a, b, c, d)
}
}
func (fn fnArg4[A, B, C, D, E]) P3(a A, b B, c C) fnArg1[D, E] {
return func(d D) E {
return fn(a, b, c, d)
}
}
func (fn fnArg4[A, B, C, D, E]) P4(a A, b B, c C, d D) fnArg0[E] {
return func() E {
return fn(a, b, c, d)
}
}
type fnArg5[A, B, C, D, E, F any] func(A, B, C, D, E) F
func FnArg5[A, B, C, D, E, F any](fn fnArg5[A, B, C, D, E, F]) fnArg5[A, B, C, D, E, F] {
return fn
}
func (fn fnArg5[A, B, C, D, E, F]) P1(a A) fnArg4[B, C, D, E, F] {
return func(b B, c C, d D, e E) F {
return fn(a, b, c, d, e)
}
}
func (fn fnArg5[A, B, C, D, E, F]) P2(a A, b B) fnArg3[C, D, E, F] {
return func(c C, d D, e E) F {
return fn(a, b, c, d, e)
}
}
func (fn fnArg5[A, B, C, D, E, F]) P3(a A, b B, c C) fnArg2[D, E, F] {
return func(d D, e E) F {
return fn(a, b, c, d, e)
}
}
func (fn fnArg5[A, B, C, D, E, F]) P4(a A, b B, c C, d D) fnArg1[E, F] {
return func(e E) F {
return fn(a, b, c, d, e)
}
}
func (fn fnArg5[A, B, C, D, E, F]) P5(a A, b B, c C, d D, e E) fnArg0[F] {
return func() F {
return fn(a, b, c, d, e)
}
}