23
23
* @param <A> the Traversable element type
24
24
* @param <App> the Applicative unification parameter
25
25
* @param <Trav> the Traversable unification parameter
26
+ * @param <AppA> the Applicative instance wrapped in the input Traversable
27
+ * @param <TravA> the Traversable instance wrapped in the output Applicative
26
28
* @param <AppTrav> the concrete parametrized output Applicative type
27
29
* @param <TravApp> the concrete parametrized input Traversable type
28
30
*/
29
- public final class Sequence <A ,App extends Applicative ,Trav extends Traversable ,AppTrav extends Applicative <?extends Traversable <A ,Trav >,App >,
30
- TravApp extends Traversable <?extends Applicative <A ,App >,Trav >>implements Fn2 <TravApp ,Function <?super Traversable <A ,Trav >, ?extends AppTrav >,AppTrav > {
31
+ public final class Sequence <A ,App extends Applicative ,Trav extends Traversable ,
32
+ AppA extends Applicative <A ,App >,
33
+ TravA extends Traversable <A ,Trav >,
34
+ AppTrav extends Applicative <TravA ,App >,
35
+ TravApp extends Traversable <AppA ,Trav >>implements Fn2 <TravApp ,Function <TravA , ?extends AppTrav >,AppTrav > {
31
36
32
37
private static final Sequence INSTANCE =new Sequence ();
33
38
@@ -36,43 +41,47 @@ private Sequence() {
36
41
37
42
@ Override
38
43
@ SuppressWarnings ("unchecked" )
39
- public AppTrav apply (TravApp traversable ,Function <? super Traversable < A , Trav > , ?extends AppTrav >pure ) {
40
- return (AppTrav )traversable .traverse (id (),pure );
44
+ public AppTrav apply (TravApp traversable ,Function <TravA , ?extends AppTrav >pure ) {
45
+ return (AppTrav )traversable .traverse (id (),trav -> pure . apply (( TravA ) trav ) );
41
46
}
42
47
43
48
@ SuppressWarnings ("unchecked" )
44
49
public static <A ,App extends Applicative ,Trav extends Traversable ,
45
- AppTrav extends Applicative <?extends Traversable <A ,Trav >,App >,
46
- TravApp extends Traversable <?extends Applicative <A ,App >,Trav >>Sequence <A ,App ,Trav ,AppTrav ,TravApp >sequence () {
50
+ AppA extends Applicative <A ,App >,
51
+ TravA extends Traversable <A ,Trav >,
52
+ AppTrav extends Applicative <TravA ,App >,
53
+ TravApp extends Traversable <AppA ,Trav >>Sequence <A ,App ,Trav ,AppA ,TravA ,AppTrav ,TravApp >sequence () {
47
54
return INSTANCE ;
48
55
}
49
56
50
57
public static <A ,App extends Applicative ,Trav extends Traversable ,
51
- AppTrav extends Applicative <?extends Traversable <A ,Trav >,App >,
52
- TravApp extends Traversable <?extends Applicative <A ,App >,Trav >>Fn1 <Function <?super Traversable <A ,Trav >, ?extends AppTrav >,AppTrav >sequence (
58
+ AppA extends Applicative <A ,App >,
59
+ TravA extends Traversable <A ,Trav >,
60
+ AppTrav extends Applicative <TravA ,App >,
61
+ TravApp extends Traversable <AppA ,Trav >>Fn1 <Function <TravA , ?extends AppTrav >,AppTrav >sequence (
53
62
TravApp traversable ) {
54
- return Sequence .<A ,App ,Trav ,AppTrav ,TravApp >sequence ().apply (traversable );
63
+ return Sequence .<A ,App ,Trav ,AppA , TravA , AppTrav ,TravApp >sequence ().apply (traversable );
55
64
}
56
65
57
66
public static <A ,App extends Applicative ,Trav extends Traversable ,
58
- AppTrav extends Applicative <?extends Traversable <A ,Trav >,App >,
59
- TravApp extends Traversable <?extends Applicative <A ,App >,Trav >>AppTrav sequence (TravApp traversable ,
60
- Function <?super Traversable <A ,Trav >, ?extends AppTrav >pure ) {
61
- return Sequence .<A ,App ,Trav ,AppTrav ,TravApp >sequence (traversable ).apply (pure );
67
+ TravA extends Traversable <A ,Trav >,
68
+ AppA extends Applicative <A ,App >,
69
+ AppTrav extends Applicative <TravA ,App >,
70
+ TravApp extends Traversable <AppA ,Trav >>AppTrav sequence (TravApp traversable ,
71
+ Function <TravA , ?extends AppTrav >pure ) {
72
+ return Sequence .<A ,App ,Trav ,AppA ,TravA ,AppTrav ,TravApp >sequence (traversable ).apply (pure );
62
73
}
63
74
64
- @ SuppressWarnings ("unchecked" )
65
- public static <A ,App extends Applicative ,AppIterable extends Applicative <Iterable <A >,App >,IterableApp extends Iterable <?extends Applicative <A ,App >>>Fn1 <Function <?super Iterable <A >, ?extends AppIterable >,AppIterable >sequence (
66
- IterableApp iterableApp ) {
67
- return pure ->
68
- (AppIterable )sequence (LambdaIterable .wrap (iterableApp ),x ->pure .apply (((LambdaIterable <A >)x ).unwrap ())
69
- .fmap (LambdaIterable ::wrap ))
70
- .fmap (LambdaIterable ::unwrap );
75
+ @ SuppressWarnings ({"unchecked" ,"RedundantTypeArguments" })
76
+ public static <A ,App extends Applicative ,AppA extends Applicative <A ,App >,AppIterable extends Applicative <Iterable <A >,App >,IterableApp extends Iterable <AppA >>
77
+ Fn1 <Function <Iterable <A >, ?extends AppIterable >,AppIterable >sequence (IterableApp iterableApp ) {
78
+ return pure -> (AppIterable )Sequence .<A ,App ,LambdaIterable ,LambdaIterable <A >,AppA ,Applicative <LambdaIterable <A >,App >,LambdaIterable <AppA >>sequence (
79
+ LambdaIterable .wrap (iterableApp ),x ->pure .apply (x .unwrap ()).fmap (LambdaIterable ::wrap ))
80
+ .fmap (LambdaIterable ::unwrap );
71
81
}
72
82
73
- public static <A ,App extends Applicative ,AppIterable extends Applicative <Iterable <A >,App >,
74
- IterableApp extends Iterable <?extends Applicative <A ,App >>>AppIterable sequence (IterableApp iterableApp ,
75
- Function <?super Iterable <A >, ?extends AppIterable >pure ) {
76
- return Sequence .<A ,App ,AppIterable ,IterableApp >sequence (iterableApp ).apply (pure );
83
+ public static <A ,App extends Applicative ,AppA extends Applicative <A ,App >,AppIterable extends Applicative <Iterable <A >,App >,IterableApp extends Iterable <AppA >>
84
+ AppIterable sequence (IterableApp iterableApp ,Function <Iterable <A >, ?extends AppIterable >pure ) {
85
+ return Sequence .<A ,App ,AppA ,AppIterable ,IterableApp >sequence (iterableApp ).apply (pure );
77
86
}
78
87
}