@@ -10,109 +10,167 @@ import scala.annotation.implicitNotFound
10
10
@ implicitNotFound(" ${F} cannot be tupled as ${G}" )
11
11
sealed trait TupledFunction [F , G ] {
12
12
def tuple (f : F ): G
13
+ def untuple (g : G ): F
13
14
}
14
15
15
16
package internal {
16
17
17
18
object TupledFunction {
18
19
19
20
def tupledFunction0 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
20
- def tuple (f : F ): G =
21
- (( args : Unit ) => f .asInstanceOf [() => Any ].apply()) .asInstanceOf [G ]
21
+ def tuple (f : F ): G = (( args : Unit ) => f. asInstanceOf [() => Any ].apply()). asInstanceOf [ G ]
22
+ def untuple ( g : G ) : F = (() => g .asInstanceOf [Unit => Any ].apply(())) .asInstanceOf [F ]
22
23
}
23
24
24
25
def tupledFunction1 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
25
- def tuple (f : F ): G =
26
- (( args : Tuple1 [ Any ] ) => f .asInstanceOf [Any => Any ].apply(args._1)) .asInstanceOf [G ]
26
+ def tuple (f : F ): G = (( args : Tuple1 [ Any ]) => f. asInstanceOf [ Any => Any ].apply(args._1)). asInstanceOf [ G ]
27
+ def untuple ( g : G ) : F = (( x1 : Any ) => g .asInstanceOf [Tuple1 [_] => Any ].apply(Tuple1 (x1))) .asInstanceOf [F ]
27
28
}
28
29
29
30
def tupledFunction2 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
30
31
def tuple (f : F ): G = f.asInstanceOf [Function2 [_, _, _]].tupled.asInstanceOf [G ]
32
+ def untuple (g : G ): F = Function .untupled(g.asInstanceOf [Tuple2 [_, _] => Any ]).asInstanceOf [F ]
31
33
}
32
34
33
35
def tupledFunction3 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
34
36
def tuple (f : F ): G = f.asInstanceOf [Function3 [_, _, _, _]].tupled.asInstanceOf [G ]
37
+ def untuple (g : G ): F = Function .untupled(g.asInstanceOf [Tuple3 [_, _, _] => Any ]).asInstanceOf [F ]
35
38
}
36
39
37
40
def tupledFunction4 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
38
41
def tuple (f : F ): G = f.asInstanceOf [Function4 [_, _, _, _, _]].tupled.asInstanceOf [G ]
42
+ def untuple (g : G ): F = Function .untupled(g.asInstanceOf [Tuple4 [_, _, _, _] => Any ]).asInstanceOf [F ]
39
43
}
40
44
41
45
def tupledFunction5 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
42
46
def tuple (f : F ): G = f.asInstanceOf [Function5 [_, _, _, _, _, _]].tupled.asInstanceOf [G ]
47
+ def untuple (g : G ): F = Function .untupled(g.asInstanceOf [Tuple5 [_, _, _, _, _] => Any ]).asInstanceOf [F ]
43
48
}
44
49
45
50
def tupledFunction6 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
46
51
def tuple (f : F ): G = f.asInstanceOf [Function6 [_, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
52
+ def untuple (g : G ): F =
53
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any ) =>
54
+ g.asInstanceOf [Tuple6 [_, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6))).asInstanceOf [F ]
47
55
}
48
56
49
57
def tupledFunction7 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
50
58
def tuple (f : F ): G = f.asInstanceOf [Function7 [_, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
59
+ def untuple (g : G ): F =
60
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any ) =>
61
+ g.asInstanceOf [Tuple7 [_, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7))).asInstanceOf [F ]
51
62
}
52
63
53
64
def tupledFunction8 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
54
65
def tuple (f : F ): G = f.asInstanceOf [Function8 [_, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
66
+ def untuple (g : G ): F =
67
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any ) =>
68
+ g.asInstanceOf [Tuple8 [_, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8))).asInstanceOf [F ]
55
69
}
56
70
57
71
def tupledFunction9 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
58
72
def tuple (f : F ): G = f.asInstanceOf [Function9 [_, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
73
+ def untuple (g : G ): F =
74
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any ) =>
75
+ g.asInstanceOf [Tuple9 [_, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9))).asInstanceOf [F ]
59
76
}
60
77
61
78
def tupledFunction10 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
62
79
def tuple (f : F ): G = f.asInstanceOf [Function10 [_, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
80
+ def untuple (g : G ): F =
81
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any ) =>
82
+ g.asInstanceOf [Tuple10 [_, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10))).asInstanceOf [F ]
63
83
}
64
84
65
85
def tupledFunction11 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
66
86
def tuple (f : F ): G = f.asInstanceOf [Function11 [_, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
87
+ def untuple (g : G ): F =
88
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any ) =>
89
+ g.asInstanceOf [Tuple11 [_, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11))).asInstanceOf [F ]
67
90
}
68
91
69
92
def tupledFunction12 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
70
93
def tuple (f : F ): G = f.asInstanceOf [Function12 [_, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
94
+ def untuple (g : G ): F =
95
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any ) =>
96
+ g.asInstanceOf [Tuple12 [_, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12))).asInstanceOf [F ]
71
97
}
72
98
73
99
def tupledFunction13 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
74
100
def tuple (f : F ): G = f.asInstanceOf [Function13 [_, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
101
+ def untuple (g : G ): F =
102
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any ) =>
103
+ g.asInstanceOf [Tuple13 [_, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13))).asInstanceOf [F ]
75
104
}
76
105
77
106
def tupledFunction14 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
78
107
def tuple (f : F ): G = f.asInstanceOf [Function14 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
108
+ def untuple (g : G ): F =
109
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any ) =>
110
+ g.asInstanceOf [Tuple14 [_, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14))).asInstanceOf [F ]
79
111
}
80
112
81
113
def tupledFunction15 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
82
114
def tuple (f : F ): G = f.asInstanceOf [Function15 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
115
+ def untuple (g : G ): F =
116
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any ) =>
117
+ g.asInstanceOf [Tuple15 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15))).asInstanceOf [F ]
83
118
}
84
119
85
120
def tupledFunction16 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
86
121
def tuple (f : F ): G = f.asInstanceOf [Function16 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
122
+ def untuple (g : G ): F =
123
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any , x16 : Any ) =>
124
+ g.asInstanceOf [Tuple16 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16))).asInstanceOf [F ]
87
125
}
88
126
89
127
def tupledFunction17 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
90
128
def tuple (f : F ): G = f.asInstanceOf [Function17 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
129
+ def untuple (g : G ): F =
130
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any , x16 : Any , x17 : Any ) =>
131
+ g.asInstanceOf [Tuple17 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17))).asInstanceOf [F ]
91
132
}
92
133
93
134
def tupledFunction18 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
94
135
def tuple (f : F ): G = f.asInstanceOf [Function18 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
136
+ def untuple (g : G ): F =
137
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any , x16 : Any , x17 : Any , x18 : Any ) =>
138
+ g.asInstanceOf [Tuple18 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18))).asInstanceOf [F ]
95
139
}
96
140
97
141
def tupledFunction19 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
98
142
def tuple (f : F ): G = f.asInstanceOf [Function19 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
143
+ def untuple (g : G ): F =
144
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any , x16 : Any , x17 : Any , x18 : Any , x19 : Any ) =>
145
+ g.asInstanceOf [Tuple19 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19))).asInstanceOf [F ]
99
146
}
100
147
101
148
def tupledFunction20 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
102
149
def tuple (f : F ): G = f.asInstanceOf [Function20 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
150
+ def untuple (g : G ): F =
151
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any , x16 : Any , x17 : Any , x18 : Any , x19 : Any , x20 : Any ) =>
152
+ g.asInstanceOf [Tuple20 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20))).asInstanceOf [F ]
103
153
}
104
154
105
155
def tupledFunction21 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
106
156
def tuple (f : F ): G = f.asInstanceOf [Function21 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
157
+ def untuple (g : G ): F =
158
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any , x16 : Any , x17 : Any , x18 : Any , x19 : Any , x20 : Any , x21 : Any ) =>
159
+ g.asInstanceOf [Tuple21 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21))).asInstanceOf [F ]
107
160
}
108
161
109
162
def tupledFunction22 [F , G ]: TupledFunction [F , G ] = new TupledFunction {
110
163
def tuple (f : F ): G = f.asInstanceOf [Function22 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]].tupled.asInstanceOf [G ]
164
+ def untuple (g : G ): F =
165
+ ((x1 : Any , x2 : Any , x3 : Any , x4 : Any , x5 : Any , x6 : Any , x7 : Any , x8 : Any , x9 : Any , x10 : Any , x11 : Any , x12 : Any , x13 : Any , x14 : Any , x15 : Any , x16 : Any , x17 : Any , x18 : Any , x19 : Any , x20 : Any , x21 : Any , x22 : Any ) =>
166
+ g.asInstanceOf [Tuple22 [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _] => Any ].apply((x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22))).asInstanceOf [F ]
111
167
}
112
168
113
169
def tupledFunctionXXL [F , G ]: TupledFunction [F , G ] = new TupledFunction {
114
- def tuple (f : F ): G =
115
- ((args : TupleXXL ) => f.asInstanceOf [FunctionXXL ].apply(args.elems)).asInstanceOf [G ]
170
+ def tuple (f : F ): G = ((args : TupleXXL ) => f.asInstanceOf [FunctionXXL ].apply(args.elems)).asInstanceOf [G ]
171
+ def untuple (g : G ): F = new FunctionXXL {
172
+ override def apply (xs : Array [Object ]): AnyRef = g.asInstanceOf [TupleXXL => AnyRef ].apply(TupleXXL (xs))
173
+ }.asInstanceOf [F ]
116
174
}
117
175
118
176
}
0 commit comments