annotate src/main/java/fj/P4.java @ 1:8ed7d71e8617

minner change
author tatsuki
date Sat, 21 Mar 2015 05:32:16 +0900
parents fe80c1edf1be
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
1 package fj;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
2
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
3 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
4 * A product-4.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
5 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
6 * @version %build.number%
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
7 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
8 public abstract class P4<A, B, C, D> {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
9 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
10 * Access the first element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
11 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
12 * @return The first element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
13 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
14 public abstract A _1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
15
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
16 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
17 * Access the second element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
18 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
19 * @return The second element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
20 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
21 public abstract B _2();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
22
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
23 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
24 * Access the third element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
25 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
26 * @return The third element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
27 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
28 public abstract C _3();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
29
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
30 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
31 * Access the fourth element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
32 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
33 * @return The fourth element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
34 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
35 public abstract D _4();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
36
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
37 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
38 * Map the first element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
39 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
40 * @param f The function to map with.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
41 * @return A product with the given function applied.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
42 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
43 public final <X> P4<X, B, C, D> map1(final F<A, X> f) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
44 return new P4<X, B, C, D>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
45 public X _1() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
46 return f.f(P4.this._1());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
47 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
48
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
49 public B _2() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
50 return P4.this._2();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
51 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
52
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
53 public C _3() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
54 return P4.this._3();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
55 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
56
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
57 public D _4() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
58 return P4.this._4();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
59 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
60 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
61 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
62
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
63 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
64 * Map the second element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
65 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
66 * @param f The function to map with.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
67 * @return A product with the given function applied.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
68 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
69 public final <X> P4<A, X, C, D> map2(final F<B, X> f) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
70 return new P4<A, X, C, D>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
71 public A _1() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
72 return P4.this._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
73 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
74
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
75 public X _2() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
76 return f.f(P4.this._2());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
77 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
78
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
79 public C _3() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
80 return P4.this._3();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
81 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
82
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
83 public D _4() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
84 return P4.this._4();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
85 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
86 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
87 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
88
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
89 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
90 * Map the third element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
91 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
92 * @param f The function to map with.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
93 * @return A product with the given function applied.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
94 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
95 public final <X> P4<A, B, X, D> map3(final F<C, X> f) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
96 return new P4<A, B, X, D>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
97 public A _1() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
98 return P4.this._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
99 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
100
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
101 public B _2() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
102 return P4.this._2();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
103 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
104
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
105 public X _3() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
106 return f.f(P4.this._3());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
107 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
108
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
109 public D _4() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
110 return P4.this._4();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
111 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
112 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
113 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
114
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
115 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
116 * Map the fourth element of the product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
117 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
118 * @param f The function to map with.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
119 * @return A product with the given function applied.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
120 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
121 public final <X> P4<A, B, C, X> map4(final F<D, X> f) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
122 return new P4<A, B, C, X>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
123 public A _1() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
124 return P4.this._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
125 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
126
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
127 public B _2() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
128 return P4.this._2();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
129 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
130
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
131 public C _3() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
132 return P4.this._3();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
133 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
134
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
135 public X _4() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
136 return f.f(P4.this._4());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
137 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
138 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
139 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
140
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
141 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
142 * Returns the 1-product projection over the first element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
143 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
144 * @return the 1-product projection over the first element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
145 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
146 public final P1<A> _1_() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
147 return F1Functions.lazy(P4.<A, B, C, D>__1()).f(this);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
148 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
149
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
150 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
151 * Returns the 1-product projection over the second element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
152 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
153 * @return the 1-product projection over the second element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
154 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
155 public final P1<B> _2_() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
156 return F1Functions.lazy(P4.<A, B, C, D>__2()).f(this);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
157 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
158
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
159 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
160 * Returns the 1-product projection over the third element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
161 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
162 * @return the 1-product projection over the third element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
163 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
164 public final P1<C> _3_() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
165 return F1Functions.lazy(P4.<A, B, C, D>__3()).f(this);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
166 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
167
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
168 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
169 * Returns the 1-product projection over the fourth element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
170 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
171 * @return the 1-product projection over the fourth element.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
172 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
173 public final P1<D> _4_() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
174 return F1Functions.lazy(P4.<A, B, C, D>__4()).f(this);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
175 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
176
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
177 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
178 * Provides a memoising P4 that remembers its values.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
179 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
180 * @return A P4 that calls this P4 once for any given element and remembers the value for subsequent calls.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
181 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
182 public final P4<A, B, C, D> memo() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
183 P4<A, B, C, D> self = this;
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
184 return new P4<A, B, C, D>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
185 private final P1<A> a = P1.memo(u -> self._1());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
186 private final P1<B> b = P1.memo(u -> self._2());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
187 private final P1<C> c = P1.memo(u -> self._3());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
188 private final P1<D> d = P1.memo(u -> self._4());
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
189
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
190 public A _1() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
191 return a._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
192 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
193
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
194 public B _2() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
195 return b._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
196 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
197
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
198 public C _3() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
199 return c._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
200 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
201
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
202 public D _4() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
203 return d._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
204 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
205 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
206 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
207
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
208
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
209 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
210 * Returns a function that returns the first element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
211 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
212 * @return A function that returns the first element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
213 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
214 public static <A, B, C, D> F<P4<A, B, C, D>, A> __1() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
215 return new F<P4<A, B, C, D>, A>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
216 public A f(final P4<A, B, C, D> p) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
217 return p._1();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
218 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
219 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
220 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
221
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
222 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
223 * Returns a function that returns the second element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
224 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
225 * @return A function that returns the second element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
226 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
227 public static <A, B, C, D> F<P4<A, B, C, D>, B> __2() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
228 return new F<P4<A, B, C, D>, B>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
229 public B f(final P4<A, B, C, D> p) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
230 return p._2();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
231 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
232 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
233 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
234
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
235 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
236 * Returns a function that returns the third element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
237 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
238 * @return A function that returns the third element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
239 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
240 public static <A, B, C, D> F<P4<A, B, C, D>, C> __3() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
241 return new F<P4<A, B, C, D>, C>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
242 public C f(final P4<A, B, C, D> p) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
243 return p._3();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
244 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
245 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
246 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
247
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
248 /**
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
249 * Returns a function that returns the fourth element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
250 *
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
251 * @return A function that returns the fourth element of a product.
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
252 */
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
253 public static <A, B, C, D> F<P4<A, B, C, D>, D> __4() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
254 return new F<P4<A, B, C, D>, D>() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
255 public D f(final P4<A, B, C, D> p) {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
256 return p._4();
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
257 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
258 };
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
259 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
260
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
261 public String toString() {
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
262 return Show.p4Show(Show.<A>anyShow(), Show.<B>anyShow(), Show.<C>anyShow(), Show.<D>anyShow()).showS(this);
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
263 }
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
264
fe80c1edf1be add getLoop
tatsuki
parents:
diff changeset
265 }