|
24 | 24 | * @param <A> the Traversable element type |
25 | 25 | * @param <App> the Applicative unification parameter |
26 | 26 | * @param <Trav> the Traversable unification parameter |
27 | | - * @param <AppA> the Applicative instance wrapped in the input Traversable |
28 | 27 | * @param <TravA> the Traversable instance wrapped in the output Applicative |
29 | 28 | * @param <AppTrav> the concrete parametrized output Applicative type |
30 | | - * @param <TravApp> the concrete parametrized input Traversable type |
31 | 29 | */ |
32 | 30 | public final class Sequence<A, App extends Applicative<?, App>, Trav extends Traversable<?, Trav>, |
33 | | - AppA extends Applicative<A, App>, |
34 | 31 | TravA extends Traversable<A, Trav>, |
35 | | - AppTrav extends Applicative<TravA, App>, |
36 | | - TravApp extends Traversable<AppA, Trav>> implements Fn2<TravApp, Fn1<TravA, ? extends AppTrav>, AppTrav> { |
| 32 | + AppTrav extends Applicative<TravA, App>> implements |
| 33 | + Fn2<Traversable<? extends Applicative<A, App>, Trav>, Fn1<TravA, ? extends AppTrav>, AppTrav> { |
37 | 34 |
|
38 | | - private static final Sequence<?, ?, ?, ?, ?, ?, ?> INSTANCE = new Sequence<>(); |
| 35 | + private static final Sequence<?, ?, ?, ?, ?> INSTANCE = new Sequence<>(); |
39 | 36 |
|
40 | 37 | private Sequence() { |
41 | 38 | } |
42 | 39 |
|
43 | 40 | @Override |
44 | | - public AppTrav checkedApply(TravApp traversable, Fn1<TravA, ? extends AppTrav> pure) { |
| 41 | + public AppTrav checkedApply(Traversable<? extends Applicative<A, App>, Trav> traversable, |
| 42 | + Fn1<TravA, ? extends AppTrav> pure) { |
45 | 43 | return traversable.traverse(id(), pure); |
46 | 44 | } |
47 | 45 |
|
48 | 46 | @SuppressWarnings("unchecked") |
49 | 47 | public static <A, App extends Applicative<?, App>, Trav extends Traversable<?, Trav>, |
50 | | - AppA extends Applicative<A, App>, |
51 | 48 | 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() { |
54 | | - return (Sequence<A, App, Trav, AppA, TravA, AppTrav, TravApp>) INSTANCE; |
| 49 | + AppTrav extends Applicative<TravA, App>> Sequence<A, App, Trav, TravA, AppTrav> sequence() { |
| 50 | + return (Sequence<A, App, Trav, TravA, AppTrav>) INSTANCE; |
55 | 51 | } |
56 | 52 |
|
57 | 53 | public static <A, App extends Applicative<?, App>, Trav extends Traversable<?, Trav>, |
58 | | - AppA extends Applicative<A, App>, |
59 | 54 | TravA extends Traversable<A, Trav>, |
60 | | - AppTrav extends Applicative<TravA, App>, |
61 | | - TravApp extends Traversable<AppA, Trav>> Fn1<Fn1<TravA, ? extends AppTrav>, AppTrav> sequence( |
62 | | - TravApp traversable) { |
63 | | - return Sequence.<A, App, Trav, AppA, TravA, AppTrav, TravApp>sequence().apply(traversable); |
| 55 | + AppTrav extends Applicative<TravA, App>> Fn1<Fn1<TravA, ? extends AppTrav>, AppTrav> sequence( |
| 56 | + Traversable<? extends Applicative<A, App>, Trav> traversable) { |
| 57 | + return Sequence.<A, App, Trav, TravA, AppTrav>sequence().apply(traversable); |
64 | 58 | } |
65 | 59 |
|
66 | 60 | public static <A, App extends Applicative<?, App>, Trav extends Traversable<?, Trav>, |
67 | 61 | 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 | | - Fn1<TravA, ? extends AppTrav> pure) { |
72 | | - return Sequence.<A, App, Trav, AppA, TravA, AppTrav, TravApp>sequence(traversable).apply(pure); |
| 62 | + AppTrav extends Applicative<TravA, App>> AppTrav sequence( |
| 63 | + Traversable<? extends Applicative<A, App>, Trav> traversable, |
| 64 | + Fn1<TravA, ? extends AppTrav> pure) { |
| 65 | + return Sequence.<A, App, Trav, TravA, AppTrav>sequence(traversable).apply(pure); |
73 | 66 | } |
74 | 67 |
|
75 | 68 | @SuppressWarnings({"unchecked", "RedundantTypeArguments"}) |
76 | | - public static <A, App extends Applicative<?, App>, AppA extends Applicative<A, App>, |
77 | | - AppIterable extends Applicative<Iterable<A>, App>, |
78 | | - IterableApp extends Iterable<AppA>> |
79 | | - Fn1<Fn1<Iterable<A>, ? extends AppIterable>, AppIterable> sequence(IterableApp iterableApp) { |
80 | | - return pure -> (AppIterable) Sequence.<A, App, LambdaIterable<?>, LambdaIterable<A>, AppA, Applicative<LambdaIterable<A>, App>, LambdaIterable<AppA>>sequence( |
| 69 | + public static <A, App extends Applicative<?, App>, AppIterable extends Applicative<Iterable<A>, App>> |
| 70 | + Fn1<Fn1<Iterable<A>, ? extends AppIterable>, AppIterable> sequence( |
| 71 | + Iterable<? extends Applicative<A, App>> iterableApp) { |
| 72 | + return pure -> (AppIterable) Sequence.<A, App, LambdaIterable<?>, LambdaIterable<A>, Applicative<LambdaIterable<A>, App>>sequence( |
81 | 73 | LambdaIterable.wrap(iterableApp), x -> pure.apply(x.unwrap()).fmap(LambdaIterable::wrap)) |
82 | 74 | .fmap(LambdaIterable::unwrap); |
83 | 75 | } |
84 | 76 |
|
85 | | - public static <A, App extends Applicative<?, App>, AppA extends Applicative<A, App>, |
86 | | - AppIterable extends Applicative<Iterable<A>, App>, IterableApp extends Iterable<AppA>> |
87 | | - AppIterable sequence(IterableApp iterableApp, Fn1<Iterable<A>, ? extends AppIterable> pure) { |
88 | | - return Sequence.<A, App, AppA, AppIterable, IterableApp>sequence(iterableApp).apply(pure); |
| 77 | + public static <A, App extends Applicative<?, App>, AppIterable extends Applicative<Iterable<A>, App>> |
| 78 | + AppIterable sequence(Iterable<? extends Applicative<A, App>> iterableApp, |
| 79 | + Fn1<Iterable<A>, ? extends AppIterable> pure) { |
| 80 | + return Sequence.<A, App, AppIterable>sequence(iterableApp).apply(pure); |
89 | 81 | } |
90 | 82 |
|
91 | 83 | @SuppressWarnings({"unchecked", "RedundantTypeArguments"}) |
92 | | - public static <A, B, App extends Applicative<?, App>, AppB extends Applicative<B, App>, |
93 | | - AppMap extends Applicative<Map<A, B>, App>, MapApp extends Map<A, AppB>> |
94 | | - Fn1<Fn1<Map<A, B>, ? extends AppMap>, AppMap> sequence(MapApp mapApp) { |
95 | | - return pure -> (AppMap) Sequence.<B, App, LambdaMap<A, ?>, LambdaMap<A, B>, AppB, Applicative<LambdaMap<A, B>, App>, LambdaMap<A, AppB>>sequence( |
| 84 | + public static <A, B, App extends Applicative<?, App>, AppMap extends Applicative<Map<A, B>, App>> |
| 85 | + Fn1<Fn1<Map<A, B>, ? extends AppMap>, AppMap> sequence(Map<A, ? extends Applicative<B, App>> mapApp) { |
| 86 | + return pure -> (AppMap) Sequence.<B, App, LambdaMap<A, ?>, LambdaMap<A, B>, Applicative<LambdaMap<A, B>, App>>sequence( |
96 | 87 | LambdaMap.wrap(mapApp), x -> pure.apply(x.unwrap()).fmap(LambdaMap::wrap)) |
97 | 88 | .fmap(LambdaMap::unwrap); |
98 | 89 | } |
99 | 90 |
|
100 | | - public static <A, B, App extends Applicative<?, App>, AppB extends Applicative<B, App>, |
101 | | - AppMap extends Applicative<Map<A, B>, App>, MapApp extends Map<A, AppB>> |
102 | | - AppMap sequence(MapApp mapApp, Fn1<Map<A, B>, ? extends AppMap> pure) { |
103 | | - return Sequence.<A, B, App, AppB, AppMap, MapApp>sequence(mapApp).apply(pure); |
| 91 | + public static <A, B, App extends Applicative<?, App>, AppMap extends Applicative<Map<A, B>, App>> |
| 92 | + AppMap sequence(Map<A, ? extends Applicative<B, App>> mapApp, Fn1<Map<A, B>, ? extends AppMap> pure) { |
| 93 | + return Sequence.<A, B, App, AppMap>sequence(mapApp).apply(pure); |
104 | 94 | } |
105 | 95 | } |
0 commit comments