Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite0cc5cd

Browse files
committed
more progress
1 parent816475e commite0cc5cd

File tree

4 files changed

+118
-102
lines changed

4 files changed

+118
-102
lines changed

‎src/main/java/com/jnape/palatable/lambda/Spike.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
importjava.util.function.BiFunction;
1616
importjava.util.function.Function;
1717

18-
importstaticcom.jnape.palatable.lambda.adt.Either.right;
1918
importstaticcom.jnape.palatable.lambda.adt.Maybe.just;
2019
importstaticcom.jnape.palatable.lambda.adt.hlist.HList.tuple;
2120
importstaticcom.jnape.palatable.lambda.functions.Fn2.fn2;
@@ -24,8 +23,9 @@
2423
importstaticcom.jnape.palatable.lambda.structural.Cases.cases;
2524
importstaticcom.jnape.palatable.lambda.structural.Matcher.$;
2625
importstaticcom.jnape.palatable.lambda.structural.Matchers.$just;
27-
importstaticcom.jnape.palatable.lambda.structural.Matchers.Any.$__;
26+
importstaticcom.jnape.palatable.lambda.structural.Matchers.$right;
2827
importstaticcom.jnape.palatable.lambda.structural.Struct.struct;
28+
importstaticjava.lang.Integer.parseInt;
2929

3030
publicclassSpike {
3131

@@ -107,10 +107,6 @@ public static <A, B, C, D, E, F, G, H, R, App extends Applicative, AppR extends
107107

108108

109109
publicstaticvoidmain(String[]args) {
110-
111-
Either<Object,Integer>foo1 =liftA(right(1),right(2),right(3),right(4), (a,b,c,d) ->a +b +c +d);
112-
System.out.println(foo1);
113-
114110
classFooimplementsStruct._4<String,Maybe<Integer>,String,Maybe<Integer>> {
115111

116112
@Override
@@ -129,12 +125,18 @@ public Maybe<Integer> getBaz() {
129125

130126
Foofoo =newFoo();
131127

128+
Stringmatch1 =struct(() ->Either.<String,Integer>right(2), () ->"foo")
129+
.match(cases(of($right(1),$(), (x,y) ->x +y),
130+
of($(),$(), (x,y) ->x +y)));
131+
132+
System.out.println(match1);
133+
132134
Integermatch =struct(foo::getBar,foo::getBaz).match(cases(
133-
of($(eq("123")),$just(), (bar,baz) ->Integer.parseInt(bar) +baz),
134-
of($(eq("foo")),$__(), (bar,baz) ->baz.orElse(-2)),
135+
of($(eq("123")),$just(), (bar1,baz1) ->parseInt(bar1) +baz1),
136+
of($(eq("foo")),$(), (bar,baz) ->1),
135137
of($(eq("foo")),$(just(1)), (bar,baz) ->baz.orElse(-2)),
136-
of($(eq("foo")),$just(1), (bar,baz) ->baz),
137-
of($__(),$__(), (bar,baz) -> -1)));
138+
of($(eq("foo")),$just(1), (bar,baz) ->-2),
139+
of($(),$(), (a,b) -> -1)));
138140

139141
System.out.println("match = " +match);
140142
}

‎src/main/java/com/jnape/palatable/lambda/structural/Case.java

Lines changed: 63 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
importcom.jnape.palatable.lambda.functions.Fn6;
1818
importcom.jnape.palatable.lambda.functions.Fn7;
1919
importcom.jnape.palatable.lambda.functions.Fn8;
20-
importcom.jnape.palatable.lambda.structural.Matchers.Any;
20+
importcom.jnape.palatable.lambda.structural.Matcher.Any;
2121

2222
importjava.util.function.BiFunction;
2323
importjava.util.function.Function;
2424

25+
importstaticcom.jnape.palatable.lambda.Spike.liftA;
2526
importstaticcom.jnape.palatable.lambda.adt.Maybe.just;
2627
importstaticcom.jnape.palatable.lambda.functions.builtin.fn2.Into.into;
2728
importstaticcom.jnape.palatable.lambda.functions.builtin.fn2.Into1.into1;
@@ -122,81 +123,81 @@ public static <A, B, C, R> Total<Tuple3<A, B, C>, R> of(Any<A> __,
122123
}
123124

124125
@SuppressWarnings({"RedundantTypeArguments","unused"})
125-
publicstatic <A,B,C,D,R>Total<Tuple4<A,B,C,D>,R>of(Any__,
126-
Any___,
127-
Any____,
128-
Any_____,
126+
publicstatic <A,B,C,D,R>Total<Tuple4<A,B,C,D>,R>of(Any<A>__,
127+
Any<B>___,
128+
Any<C>____,
129+
Any<D>_____,
129130
Fn4<?superA, ?superB, ?superC, ?superD, ?extendsR>fn) {
130131
returnCase.<A,B,C,D,R>of(fn);
131132
}
132133

133134
@SuppressWarnings({"RedundantTypeArguments","unused"})
134-
publicstatic <A,B,C,D,E,R>Total<Tuple5<A,B,C,D,E>,R>of(Any__,
135-
Any___,
136-
Any____,
137-
Any_____,
138-
Any______,
135+
publicstatic <A,B,C,D,E,R>Total<Tuple5<A,B,C,D,E>,R>of(Any<A>__,
136+
Any<B>___,
137+
Any<C>____,
138+
Any<D>_____,
139+
Any<E>______,
139140
Fn5<?superA, ?superB, ?superC, ?superD, ?superE, ?extendsR>fn) {
140141
returnCase.<A,B,C,D,E,R>of(fn);
141142
}
142143

143144
@SuppressWarnings({"RedundantTypeArguments","unused"})
144-
publicstatic <A,B,C,D,E,F,R>Total<Tuple6<A,B,C,D,E,F>,R>of(Any__,
145-
Any___,
146-
Any____,
147-
Any_____,
148-
Any______,
149-
Any_______,
145+
publicstatic <A,B,C,D,E,F,R>Total<Tuple6<A,B,C,D,E,F>,R>of(Any<A>__,
146+
Any<B>___,
147+
Any<C>____,
148+
Any<D>_____,
149+
Any<E>______,
150+
Any<F>_______,
150151
Fn6<?superA, ?superB, ?superC, ?superD, ?superE, ?superF, ?extendsR>fn) {
151152
returnCase.<A,B,C,D,E,F,R>of(fn);
152153
}
153154

154155
@SuppressWarnings({"RedundantTypeArguments","unused"})
155-
publicstatic <A,B,C,D,E,F,G,R>Total<Tuple7<A,B,C,D,E,F,G>,R>of(Any__,
156-
Any___,
157-
Any____,
158-
Any_____,
159-
Any______,
160-
Any_______,
161-
Any________,
156+
publicstatic <A,B,C,D,E,F,G,R>Total<Tuple7<A,B,C,D,E,F,G>,R>of(Any<A>__,
157+
Any<B>___,
158+
Any<C>____,
159+
Any<D>_____,
160+
Any<E>______,
161+
Any<F>_______,
162+
Any<G>________,
162163
Fn7<?superA, ?superB, ?superC, ?superD, ?superE, ?superF, ?superG, ?extendsR>fn) {
163164
returnCase.<A,B,C,D,E,F,G,R>of(fn);
164165
}
165166

166167
@SuppressWarnings({"RedundantTypeArguments","unused"})
167-
publicstatic <A,B,C,D,E,F,G,H,R>Total<Tuple8<A,B,C,D,E,F,G,H>,R>of(Any__,
168-
Any___,
169-
Any____,
170-
Any_____,
171-
Any______,
172-
Any_______,
173-
Any________,
174-
Any_________,
168+
publicstatic <A,B,C,D,E,F,G,H,R>Total<Tuple8<A,B,C,D,E,F,G,H>,R>of(Any<A>__,
169+
Any<B>___,
170+
Any<C>____,
171+
Any<D>_____,
172+
Any<E>______,
173+
Any<F>_______,
174+
Any<G>________,
175+
Any<H>_________,
175176
Fn8<?superA, ?superB, ?superC, ?superD, ?superE, ?superF, ?superG, ?superH, ?extendsR>fn) {
176177
returnCase.<A,B,C,D,E,F,G,H,R>of(fn);
177178
}
178179

179180

180181
publicstatic <A,APrime,R>Partial<SingletonHList<A>,R>of(Matcher<?superA, ?extendsAPrime>aMatcher,
181182
Function<?superAPrime, ?extendsR>body) {
182-
returnnewPartial<>(into1(a ->aMatcher.apply(a).fmap(body)));
183+
returnnewPartial<>(into1(a ->aMatcher.match(a).fmap(body)));
183184
}
184185

185186
publicstatic <A,APrime,B,BPrime,R>Partial<Tuple2<A,B>,R>of(
186187
Matcher<?superA, ?extendsAPrime>aMatcher,
187188
Matcher<?superB, ?extendsBPrime>bMatcher,
188189
BiFunction<?superAPrime, ?superBPrime, ?extendsR>body) {
189-
returnnewPartial<>(into((a,b) ->aMatcher.apply(a).flatMap(aPrime ->bMatcher.apply(b).fmap(bPrime ->body.apply(aPrime,bPrime)))));
190+
returnnewPartial<>(into((a,b) ->aMatcher.match(a).flatMap(aPrime ->bMatcher.match(b).fmap(bPrime ->body.apply(aPrime,bPrime)))));
190191
}
191192

192193
publicstatic <A,APrime,B,BPrime,C,CPrime,R>Partial<Tuple3<A,B,C>,R>of(
193194
Matcher<?superA, ?extendsAPrime>aMatcher,
194195
Matcher<?superB, ?extendsBPrime>bMatcher,
195196
Matcher<?superC, ?extendsCPrime>cMatcher,
196197
Fn3<?superAPrime, ?superBPrime, ?superCPrime, ?extendsR>body) {
197-
returnnewPartial<>(into3((a,b,c) ->aMatcher.apply(a)
198-
.flatMap(aPrime ->bMatcher.apply(b)
199-
.flatMap(bPrime ->cMatcher.apply(c)
198+
returnnewPartial<>(into3((a,b,c) ->aMatcher.match(a)
199+
.flatMap(aPrime ->bMatcher.match(b)
200+
.flatMap(bPrime ->cMatcher.match(c)
200201
.fmap(cPrime ->body.apply(aPrime,bPrime,cPrime))))));
201202
}
202203

@@ -206,10 +207,10 @@ public static <A, APrime, B, BPrime, C, CPrime, D, DPrime, R> Partial<Tuple4<A,
206207
Matcher<?superC, ?extendsCPrime>cMatcher,
207208
Matcher<?superD, ?extendsDPrime>dMatcher,
208209
Fn4<?superAPrime, ?superBPrime, ?superCPrime, ?superDPrime, ?extendsR>body) {
209-
returnnewPartial<>(into4((a,b,c,d) ->aMatcher.apply(a)
210-
.flatMap(aPrime ->bMatcher.apply(b)
211-
.flatMap(bPrime ->cMatcher.apply(c)
212-
.flatMap(cPrime ->dMatcher.apply(d)
210+
returnnewPartial<>(into4((a,b,c,d) ->aMatcher.match(a)
211+
.flatMap(aPrime ->bMatcher.match(b)
212+
.flatMap(bPrime ->cMatcher.match(c)
213+
.flatMap(cPrime ->dMatcher.match(d)
213214
.fmap(dPrime ->body.apply(aPrime,bPrime,cPrime,dPrime)))))));
214215
}
215216

@@ -221,11 +222,11 @@ public static <A, APrime, B, BPrime, C, CPrime, D, DPrime, E, EPrime, R> Partial
221222
Matcher<?superD, ?extendsDPrime>dMatcher,
222223
Matcher<?superE, ?extendsEPrime>eMatcher,
223224
Fn5<?superAPrime, ?superBPrime, ?superCPrime, ?superDPrime, ?superEPrime, ?extendsR>body) {
224-
returnnewPartial<>(into5((a,b,c,d,e) ->aMatcher.apply(a)
225-
.flatMap(aPrime ->bMatcher.apply(b)
226-
.flatMap(bPrime ->cMatcher.apply(c)
227-
.flatMap(cPrime ->dMatcher.apply(d)
228-
.flatMap(dPrime ->eMatcher.apply(e)
225+
returnnewPartial<>(into5((a,b,c,d,e) ->aMatcher.match(a)
226+
.flatMap(aPrime ->bMatcher.match(b)
227+
.flatMap(bPrime ->cMatcher.match(c)
228+
.flatMap(cPrime ->dMatcher.match(d)
229+
.flatMap(dPrime ->eMatcher.match(e)
229230
.fmap(ePrime ->body.apply(aPrime,bPrime,cPrime,dPrime,ePrime))))))));
230231
}
231232

@@ -237,15 +238,8 @@ public static <A, APrime, B, BPrime, C, CPrime, D, DPrime, E, EPrime, F, FPrime,
237238
Matcher<?superD, ?extendsDPrime>dMatcher,
238239
Matcher<?superE, ?extendsEPrime>eMatcher,
239240
Matcher<?superF, ?extendsFPrime>fMatcher,
240-
Fn6<?superAPrime, ?superBPrime, ?superCPrime, ?superDPrime, ?superEPrime, ?superFPrime, ?extendsR>body) {
241-
//todo: for-comprehensions, lest any consumers needing to flatMap 6 levels deep instead choose death's sweet embrace
242-
returnnewPartial<>(into6((a,b,c,d,e,f) ->aMatcher.apply(a)
243-
.flatMap(aPrime ->bMatcher.apply(b)
244-
.flatMap(bPrime ->cMatcher.apply(c)
245-
.flatMap(cPrime ->dMatcher.apply(d)
246-
.flatMap(dPrime ->eMatcher.apply(e)
247-
.flatMap(ePrime ->fMatcher.apply(f)
248-
.fmap(fPrime ->body.apply(aPrime,bPrime,cPrime,dPrime,ePrime,fPrime)))))))));
241+
Fn6<?superAPrime, ?superBPrime, ?superCPrime, ?superDPrime, ?superEPrime, ?superFPrime,R>body) {
242+
returnnewPartial<>(into6((a,b,c,d,e,f) ->liftA(aMatcher.match(a),bMatcher.match(b),cMatcher.match(c),dMatcher.match(d),eMatcher.match(e),fMatcher.match(f),body).coerce()));
249243
}
250244

251245
publicstatic <A,APrime,B,BPrime,C,CPrime,D,DPrime,E,EPrime,F,FPrime,G,GPrime,R>Partial<Tuple7<A,B,C,D,E,F,G>,R>of(
@@ -257,13 +251,13 @@ public static <A, APrime, B, BPrime, C, CPrime, D, DPrime, E, EPrime, F, FPrime,
257251
Matcher<?superF, ?extendsFPrime>fMatcher,
258252
Matcher<?superG, ?extendsGPrime>gMatcher,
259253
Fn7<?superAPrime, ?superBPrime, ?superCPrime, ?superDPrime, ?superEPrime, ?superFPrime, ?superGPrime, ?extendsR>body) {
260-
returnnewPartial<>(into7((a,b,c,d,e,f,g) ->aMatcher.apply(a)
261-
.flatMap(aPrime ->bMatcher.apply(b)
262-
.flatMap(bPrime ->cMatcher.apply(c)
263-
.flatMap(cPrime ->dMatcher.apply(d)
264-
.flatMap(dPrime ->eMatcher.apply(e)
265-
.flatMap(ePrime ->fMatcher.apply(f)
266-
.flatMap(fPrime ->gMatcher.apply(g)
254+
returnnewPartial<>(into7((a,b,c,d,e,f,g) ->aMatcher.match(a)
255+
.flatMap(aPrime ->bMatcher.match(b)
256+
.flatMap(bPrime ->cMatcher.match(c)
257+
.flatMap(cPrime ->dMatcher.match(d)
258+
.flatMap(dPrime ->eMatcher.match(e)
259+
.flatMap(ePrime ->fMatcher.match(f)
260+
.flatMap(fPrime ->gMatcher.match(g)
267261
.fmap(gPrime ->body.apply(aPrime,bPrime,cPrime,dPrime,ePrime,fPrime,gPrime))))))))));
268262
}
269263

@@ -277,14 +271,14 @@ public static <A, APrime, B, BPrime, C, CPrime, D, DPrime, E, EPrime, F, FPrime,
277271
Matcher<?superG, ?extendsGPrime>gMatcher,
278272
Matcher<?superH, ?extendsHPrime>hMatcher,
279273
Fn8<?superAPrime, ?superBPrime, ?superCPrime, ?superDPrime, ?superEPrime, ?superFPrime, ?superGPrime, ?superHPrime, ?extendsR>body) {
280-
returnnewPartial<>(into8((a,b,c,d,e,f,g,h) ->aMatcher.apply(a)
281-
.flatMap(aPrime ->bMatcher.apply(b)
282-
.flatMap(bPrime ->cMatcher.apply(c)
283-
.flatMap(cPrime ->dMatcher.apply(d)
284-
.flatMap(dPrime ->eMatcher.apply(e)
285-
.flatMap(ePrime ->fMatcher.apply(f)
286-
.flatMap(fPrime ->gMatcher.apply(g)
287-
.flatMap(gPrime ->hMatcher.apply(h)
274+
returnnewPartial<>(into8((a,b,c,d,e,f,g,h) ->aMatcher.match(a)
275+
.flatMap(aPrime ->bMatcher.match(b)
276+
.flatMap(bPrime ->cMatcher.match(c)
277+
.flatMap(cPrime ->dMatcher.match(d)
278+
.flatMap(dPrime ->eMatcher.match(e)
279+
.flatMap(ePrime ->fMatcher.match(f)
280+
.flatMap(fPrime ->gMatcher.match(g)
281+
.flatMap(gPrime ->hMatcher.match(h)
288282
.fmap(hPrime ->body.apply(aPrime,bPrime,cPrime,dPrime,ePrime,fPrime,gPrime,hPrime)))))))))));
289283
}
290284

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,44 @@
11
packagecom.jnape.palatable.lambda.structural;
22

33
importcom.jnape.palatable.lambda.adt.Maybe;
4-
importcom.jnape.palatable.lambda.functions.Fn1;
54

65
importjava.util.function.Function;
76

87
importstaticcom.jnape.palatable.lambda.adt.Maybe.just;
98
importstaticcom.jnape.palatable.lambda.functions.builtin.fn2.Eq.eq;
109

1110
@FunctionalInterface
12-
publicinterfaceMatcher<A,B>extendsFn1<A,Maybe<B>> {
11+
publicinterfaceMatcher<A,B> {
12+
13+
Maybe<B>match(Aa);
1314

1415
static <A>Matcher<A,A>$(Function<?superA,Boolean>predicate) {
1516
returna ->just(a).filter(predicate);
1617
}
1718

19+
@SuppressWarnings("unchecked")
20+
static <A>Any<A>$() {
21+
returnAny.INSTANCE;
22+
}
23+
1824
static <A>Matcher<A,A>$(Aa) {
1925
return$(eq(a));
2026
}
2127

2228
static <A>Matcher<A,A>identity() {
2329
returnMaybe::just;
2430
}
31+
32+
publicstaticfinalclassAny<A>implementsMatcher<A,A> {
33+
34+
privatestaticfinalAnyINSTANCE =newAny();
35+
36+
privateAny() {
37+
}
38+
39+
@Override
40+
publicMaybe<A>match(Aa) {
41+
returnjust(a);
42+
}
43+
}
2544
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp