@@ -21,7 +21,7 @@ object Expr {
21
21
def show (implicit toolbox : Toolbox ): String = toolbox.show(expr)
22
22
}
23
23
24
- implicit object BetaReduction {
24
+ implicit object FunctionBetaReduction {
25
25
26
26
def (f : Expr [() => R ]) apply[R ] (): Expr [R ] =
27
27
new Exprs .FunctionAppliedTo [R ](f, Array .empty)
@@ -91,7 +91,75 @@ object Expr {
91
91
92
92
def (f : Expr [(T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ], x17 : Expr [T17 ], x18 : Expr [T18 ], x19 : Expr [T19 ], x20 : Expr [T20 ], x21 : Expr [T21 ], x22 : Expr [T22 ]): Expr [R ] =
93
93
new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22))
94
+ }
95
+
96
+ implicit object ContextualFunctionBetaReduction {
97
+
98
+ def (f : Expr [given (T1 ) => R ]) apply[T1 , R ](x1 : Expr [T1 ]): Expr [R ] =
99
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1))
100
+
101
+ def (f : Expr [given (T1 , T2 ) => R ]) apply[T1 , T2 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ]): Expr [R ] =
102
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2))
103
+
104
+ def (f : Expr [given (T1 , T2 , T3 ) => R ]) apply[T1 , T2 , T3 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ]): Expr [R ] =
105
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3))
106
+
107
+ def (f : Expr [given (T1 , T2 , T3 , T4 ) => R ]) apply[T1 , T2 , T3 , T4 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ]): Expr [R ] =
108
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4))
109
+
110
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ]): Expr [R ] =
111
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5))
94
112
113
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ]): Expr [R ] =
114
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6))
115
+
116
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ]): Expr [R ] =
117
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7))
118
+
119
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ]): Expr [R ] =
120
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8))
121
+
122
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ]): Expr [R ] =
123
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9))
124
+
125
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ]): Expr [R ] =
126
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10))
127
+
128
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ]): Expr [R ] =
129
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11))
130
+
131
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ]): Expr [R ] =
132
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12))
133
+
134
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ]): Expr [R ] =
135
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13))
136
+
137
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ]): Expr [R ] =
138
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14))
139
+
140
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ]): Expr [R ] =
141
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15))
142
+
143
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ]): Expr [R ] =
144
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16))
145
+
146
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ], x17 : Expr [T17 ]): Expr [R ] =
147
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17))
148
+
149
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ], x17 : Expr [T17 ], x18 : Expr [T18 ]): Expr [R ] =
150
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18))
151
+
152
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ], x17 : Expr [T17 ], x18 : Expr [T18 ], x19 : Expr [T19 ]): Expr [R ] =
153
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19))
154
+
155
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ], x17 : Expr [T17 ], x18 : Expr [T18 ], x19 : Expr [T19 ], x20 : Expr [T20 ]): Expr [R ] =
156
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20))
157
+
158
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ], x17 : Expr [T17 ], x18 : Expr [T18 ], x19 : Expr [T19 ], x20 : Expr [T20 ], x21 : Expr [T21 ]): Expr [R ] =
159
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21))
160
+
161
+ def (f : Expr [given (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ) => R ]) apply[T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , R ](x1 : Expr [T1 ], x2 : Expr [T2 ], x3 : Expr [T3 ], x4 : Expr [T4 ], x5 : Expr [T5 ], x6 : Expr [T6 ], x7 : Expr [T7 ], x8 : Expr [T8 ], x9 : Expr [T9 ], x10 : Expr [T10 ], x11 : Expr [T11 ], x12 : Expr [T12 ], x13 : Expr [T13 ], x14 : Expr [T14 ], x15 : Expr [T15 ], x16 : Expr [T16 ], x17 : Expr [T17 ], x18 : Expr [T18 ], x19 : Expr [T19 ], x20 : Expr [T20 ], x21 : Expr [T21 ], x22 : Expr [T22 ]): Expr [R ] =
162
+ new Exprs .FunctionAppliedTo [R ](f, Array (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22))
95
163
}
96
164
97
165
}
0 commit comments