Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Apply/ap): make total overloads F: 0,1,2,2C,3,3C,4 to G: 1,2,2C,3,3C,4 #1721

Merged
merged 41 commits into from
Aug 22, 2022
Merged
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
2be1dfe
refactor(Apply/ap): replace generics `A`/`B` with `A1`/`A2`
waynevanson Jun 11, 2022
e2a61ba
feat(Apply/ap): add `Apply<F>` to `Apply3C<G>` overload
waynevanson Jun 11, 2022
9a3ebb4
feat(Apply/ap): add `Apply<F>` to `Apply3<G>` overload
waynevanson Jun 11, 2022
c2b586b
feat(Apply/ap): add `Apply<F>` to `Apply4<G>` overload
waynevanson Jun 11, 2022
96c96e5
feat(Apply/ap): add `Apply1<F>` to `Apply1<G>` overload
waynevanson Jun 11, 2022
a5139ae
feat(Apply/ap): add `Apply1<F>` to `Apply2<G>` overload
waynevanson Jun 11, 2022
9405eca
feat(Apply/ap): add `Apply1<F>` to `Apply3<G>` overload
waynevanson Jun 11, 2022
1a3098f
feat(Apply/ap): add `Apply1<F>` to `Apply3C<G>` overload
waynevanson Jun 11, 2022
fb25871
feat(Apply/ap): add `Apply1<F>` to `Apply4<G>` overload
waynevanson Jun 11, 2022
19e4ff6
feat(Apply/ap): add `Apply2<F>` to `Apply1<G>` overload
waynevanson Jun 12, 2022
81b1ec5
feat(Apply/ap): add `Apply2<F>` to `Apply2<G>` overload
waynevanson Jun 12, 2022
c142288
refactor(Apply/ap): replace generics `E`/`FE` with `E2`/`E1`
waynevanson Jun 12, 2022
ec265fd
feat(Apply/ap): add `Apply2<F>` to `Apply3<G>` overload
waynevanson Jun 12, 2022
5d7ae0c
feat(Apply/ap): add `Apply2<F>` to `Apply3C<G>` overload
waynevanson Jun 12, 2022
2afaf98
feat(Apply/ap): add `Apply2<F>` to `Apply4<G>` overload
waynevanson Jun 12, 2022
364e999
feat(Apply/ap): add `Apply2C<F>` to `Apply1<G>` overload
waynevanson Jun 12, 2022
fce20ba
feat(Apply/ap): add `Apply2C<F>` to `Apply2<G>` overload
waynevanson Jun 12, 2022
b822abc
feat(Apply/ap): add `Apply2C<F>` to `Apply2C<G>` overload
waynevanson Jun 12, 2022
2c206bb
feat(Apply/ap): add `Apply2C<F>` to `Apply3<G>` overload
waynevanson Jun 12, 2022
0da9bf4
feat(Apply/ap): add `Apply2C<F>` to `Apply3C<G>` overload
waynevanson Jun 12, 2022
1e7662d
feat(Apply/ap): add `Apply2C<F>` to `Apply4<G>` overload
waynevanson Jun 12, 2022
9edada8
feat(Apply/ap): add `Apply3<F>` to `Apply1<G>` overload
waynevanson Jun 12, 2022
13a40a1
feat(Apply/ap): add `Apply3<F>` to `Apply2<G>` overload
waynevanson Jun 12, 2022
57c62fd
feat(Apply/ap): add `Apply3<F>` to `Apply2C<G>` overload
waynevanson Jun 12, 2022
9289609
feat(Apply/ap): add `Apply3<F>` to `Apply3<G>` overload
waynevanson Jun 12, 2022
4f40a07
feat(Apply/ap): add `Apply3<F>` to `Apply3C<G>` overload
waynevanson Jun 12, 2022
dee5544
feat(Apply/ap): add `Apply3<F>` to `Apply4<G>` overload
waynevanson Jun 12, 2022
b4e9647
feat(Apply/ap): add `Apply4<F>` to `Apply1<G>` overload
waynevanson Jun 12, 2022
3ca3bc6
feat(Apply/ap): add `Apply4<F>` to `Apply2<G>` overload
waynevanson Jun 12, 2022
215958d
feat(Apply/ap): add `Apply4<F>` to `Apply2C<G>` overload
waynevanson Jun 12, 2022
8e61391
feat(Apply/ap): add `Apply4<F>` to `Apply3<G>` overload
waynevanson Jun 12, 2022
dce9d5f
feat(Apply/ap): add `Apply4<F>` to `Apply3C<G>` overload
waynevanson Jun 12, 2022
edffe35
feat(Apply/ap): add `Apply4<F>` to `Apply4<G>` overload
waynevanson Jun 12, 2022
cee58ea
feat(Apply/ap): add `Apply3C<F>` to `Apply1<G>` overload
waynevanson Jun 12, 2022
84cd63f
feat(Apply/ap): add `Apply3C<F>` to `Apply2<G>` overload
waynevanson Jun 12, 2022
f9d3304
feat(Apply/ap): add `Apply3C<F>` to `Apply2C<G>` overload
waynevanson Jun 12, 2022
d4d41f9
feat(Apply/ap): add `Apply3C<F>` to `Apply3<G>` overload
waynevanson Jun 12, 2022
70917bd
feat(Apply/ap): add `Apply3C<F>` to `Apply3C<G>` overload
waynevanson Jun 12, 2022
5e4f4aa
feat(Apply/ap): add `Apply3C<F>` to `Apply4<G>` overload
waynevanson Jun 12, 2022
4b9055f
Merge branch 'gcanti:master' into feat.overloads
waynevanson Jul 23, 2022
950f4c8
refactor(apply): normailise generic names
waynevanson Aug 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
220 changes: 216 additions & 4 deletions src/Apply.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,16 +110,228 @@ export interface Apply4<F extends URIS4> extends Functor4<F> {
* @category combinators
* @since 2.10.0
*/
export function ap<F extends URIS2, G extends URIS2, E>(
export function ap<F extends URIS4, G extends URIS4>(
F: Apply4<F>,
G: Apply4<G>
): <FS, GS, FR, GR, FE, GE, A>(
fa: Kind4<F, FS, FR, FE, Kind4<G, GS, GR, GE, A>>
) => <B>(fab: Kind4<F, FS, FR, FE, Kind4<G, GS, GR, GE, (a: A) => B>>) => Kind4<F, FS, FR, FE, Kind4<G, GS, GR, GE, B>>
export function ap<F extends URIS4, G extends URIS3>(
F: Apply4<F>,
G: Apply3<G>
): <S, FR, GR, FE, GE, A>(
fa: Kind4<F, S, FR, FE, Kind3<G, GR, GE, A>>
) => <B>(fab: Kind4<F, S, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind4<F, S, FR, FE, Kind3<G, GR, GE, B>>
export function ap<F extends URIS4, G extends URIS3, GE>(
F: Apply4<F>,
G: Apply3C<G, GE>
): <S, FR, GR, FE, A>(
fa: Kind4<F, S, FR, FE, Kind3<G, GR, GE, A>>
) => <B>(fab: Kind4<F, S, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind4<F, S, FR, FE, Kind3<G, GR, GE, B>>
export function ap<F extends URIS4, G extends URIS2>(
F: Apply4<F>,
G: Apply2<G>
): <S, R, FE, GE, A>(
fa: Kind4<F, S, R, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind4<F, S, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind4<F, S, R, FE, Kind2<G, GE, B>>
export function ap<F extends URIS4, G extends URIS2, GE>(
F: Apply4<F>,
G: Apply2C<G, GE>
): <S, R, FE, A>(
fa: Kind4<F, S, R, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind4<F, S, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind4<F, S, R, FE, Kind2<G, GE, B>>
export function ap<F extends URIS4, G extends URIS>(
F: Apply4<F>,
G: Apply1<G>
): <S, R, E, A>(
fa: Kind4<F, S, R, E, Kind<G, A>>
) => <B>(fab: Kind4<F, S, R, E, Kind<G, (a: A) => B>>) => Kind4<F, S, R, E, Kind<G, B>>
export function ap<F extends URIS3, G extends URIS4, FE>(
F: Apply3C<F, FE>,
G: Apply4<G>
): <S, FR, GR, GE, A>(
fa: Kind3<F, FR, FE, Kind4<G, S, GR, GE, A>>
) => <B>(fab: Kind3<F, FR, FE, Kind4<G, S, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind4<G, S, GR, GE, B>>
export function ap<F extends URIS3, G extends URIS3, FE>(
F: Apply3C<F, FE>,
G: Apply3<G>
): <FR, GR, GE, A>(
fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
export function ap<F extends URIS3, G extends URIS3, FE, GE>(
F: Apply3C<F, FE>,
G: Apply3C<G, GE>
): <FR, GR, FE, A>(
fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
export function ap<F extends URIS3, G extends URIS2, FE>(
F: Apply3C<F, FE>,
G: Apply2<G>
): <R, GE, A>(
fa: Kind3<F, R, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
export function ap<F extends URIS3, G extends URIS2, FE, GE>(
F: Apply3C<F, FE>,
G: Apply2C<G, GE>
): <R, A>(
fa: Kind3<F, R, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
export function ap<F extends URIS3, G extends URIS, E>(
F: Apply3C<F, E>,
G: Apply1<G>
): <R, A>(
fa: Kind3<F, R, E, Kind<G, A>>
) => <B>(fab: Kind3<F, R, E, Kind<G, (a: A) => B>>) => Kind3<F, R, E, Kind<G, B>>
export function ap<F extends URIS3, G extends URIS4>(
F: Apply3<F>,
G: Apply4<G>
): <S, FR, GR, FE, GE, A>(
fa: Kind3<F, FR, FE, Kind4<G, S, GR, GE, A>>
) => <B>(fab: Kind3<F, FR, FE, Kind4<G, S, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind4<G, S, GR, GE, B>>
export function ap<F extends URIS3, G extends URIS3>(
F: Apply3<F>,
G: Apply3<G>
): <FR, GR, FE, GE, A>(
fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
export function ap<F extends URIS3, G extends URIS3, GE>(
F: Apply3<F>,
G: Apply3C<G, GE>
): <FR, GR, FE, A>(
fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
export function ap<F extends URIS3, G extends URIS2>(
F: Apply3<F>,
G: Apply2<G>
): <R, FE, GE, A>(
fa: Kind3<F, R, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
export function ap<F extends URIS3, G extends URIS2, GE>(
F: Apply3<F>,
G: Apply2C<G, GE>
): <R, FE, A>(
fa: Kind3<F, R, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
export function ap<F extends URIS3, G extends URIS>(
F: Apply3<F>,
G: Apply1<G>
): <R, E, A>(
fa: Kind3<F, R, E, Kind<G, A>>
) => <B>(fab: Kind3<F, R, E, Kind<G, (a: A) => B>>) => Kind3<F, R, E, Kind<G, B>>
export function ap<F extends URIS2, G extends URIS4, FE>(
F: Apply2C<F, FE>,
G: Apply4<G>
): <S, R, GE, A>(
fa: Kind2<F, FE, Kind4<G, S, R, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind4<G, S, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind4<G, S, R, GE, B>>
export function ap<F extends URIS2, G extends URIS3, FE>(
F: Apply2C<F, FE>,
G: Apply3<G>
): <R, GE, A>(
fa: Kind2<F, FE, Kind3<G, R, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
export function ap<F extends URIS2, G extends URIS3, FE, GE>(
F: Apply2C<F, FE>,
G: Apply3C<G, GE>
): <R, A>(
fa: Kind2<F, FE, Kind3<G, R, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
export function ap<F extends URIS2, G extends URIS2, FE>(
F: Apply2C<F, FE>,
G: Apply2<G>
): <GE, A>(
fa: Kind2<F, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
export function ap<F extends URIS2, G extends URIS2, FE, GE>(
F: Apply2C<F, FE>,
G: Apply2C<G, GE>
): <A>(
fa: Kind2<F, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
export function ap<F extends URIS2, G extends URIS, E>(
F: Apply2C<F, E>,
G: Apply1<G>
): <A>(fa: Kind2<F, E, Kind<G, A>>) => <B>(fab: Kind2<F, E, Kind<G, (a: A) => B>>) => Kind2<F, E, Kind<G, B>>
export function ap<F extends URIS2, G extends URIS4>(
F: Apply2<F>,
G: Apply2C<G, E>
G: Apply4<G>
): <S, R, FE, GE, A>(
fa: Kind2<F, FE, Kind4<G, S, R, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind4<G, S, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind4<G, S, R, GE, B>>
export function ap<F extends URIS2, G extends URIS3>(
F: Apply2<F>,
G: Apply3<G>
): <R, FE, GE, A>(
fa: Kind2<F, FE, Kind3<G, R, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
export function ap<F extends URIS2, G extends URIS3, GE>(
F: Apply2<F>,
G: Apply3C<G, GE>
): <R, FE, A>(
fa: Kind2<F, FE, Kind3<G, R, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
export function ap<F extends URIS2, G extends URIS2>(
F: Apply2<F>,
G: Apply2<G>
): <FE, GE, A>(
fa: Kind2<F, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
export function ap<F extends URIS2, G extends URIS2, GE>(
F: Apply2<F>,
G: Apply2C<G, GE>
): <FE, A>(
fa: Kind2<F, FE, Kind2<G, E, A>>
) => <B>(fab: Kind2<F, FE, Kind2<G, E, (a: A) => B>>) => Kind2<F, FE, Kind2<G, E, B>>
fa: Kind2<F, FE, Kind2<G, GE, A>>
) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
export function ap<F extends URIS2, G extends URIS>(
F: Apply2<F>,
G: Apply1<G>
): <E, A>(fa: Kind2<F, E, Kind<G, A>>) => <B>(fab: Kind2<F, E, Kind<G, (a: A) => B>>) => Kind2<F, E, Kind<G, B>>
export function ap<F extends URIS, G extends URIS4>(
F: Apply1<F>,
G: Apply4<G>
): <S, R, E, A>(
fa: Kind<F, Kind4<G, S, R, E, A>>
) => <B>(fab: Kind<F, Kind4<G, S, R, E, (a: A) => B>>) => Kind<F, Kind4<G, S, R, E, B>>
export function ap<F extends URIS, G extends URIS3>(
F: Apply1<F>,
G: Apply3<G>
): <R, E, A>(
fa: Kind<F, Kind3<G, R, E, A>>
) => <B>(fab: Kind<F, Kind3<G, R, E, (a: A) => B>>) => Kind<F, Kind3<G, R, E, B>>
export function ap<F extends URIS, G extends URIS3, E>(
F: Apply1<F>,
G: Apply3C<G, E>
): <R, A>(
fa: Kind<F, Kind3<G, R, E, A>>
) => <B>(fab: Kind<F, Kind3<G, R, E, (a: A) => B>>) => Kind<F, Kind3<G, R, E, B>>
export function ap<F extends URIS, G extends URIS2>(
F: Apply1<F>,
G: Apply2<G>
): <E, A>(fa: Kind<F, Kind2<G, E, A>>) => <B>(fab: Kind<F, Kind2<G, E, (a: A) => B>>) => Kind<F, Kind2<G, E, B>>
export function ap<F extends URIS, G extends URIS2, E>(
F: Apply1<F>,
G: Apply2C<G, E>
): <A>(fa: Kind<F, Kind2<G, E, A>>) => <B>(fab: Kind<F, Kind2<G, E, (a: A) => B>>) => Kind<F, Kind2<G, E, B>>
export function ap<F extends URIS, G extends URIS>(
F: Apply1<F>,
G: Apply1<G>
): <A>(fa: Kind<F, Kind<G, A>>) => <B>(fab: Kind<F, Kind<G, (a: A) => B>>) => Kind<F, Kind<G, B>>
export function ap<F, G extends URIS4>(
F: Apply<F>,
G: Apply4<G>
): <S, R, E, A>(
fa: HKT<F, Kind4<G, S, R, E, A>>
) => <B>(fab: HKT<F, Kind4<G, S, R, E, (a: A) => B>>) => HKT<F, Kind4<G, S, R, E, B>>
export function ap<F, G extends URIS3>(
F: Apply<F>,
G: Apply3<G>
): <R, E, A>(
fa: HKT<F, Kind3<G, R, E, A>>
) => <B>(fab: HKT<F, Kind3<G, R, E, (a: A) => B>>) => HKT<F, Kind3<G, R, E, B>>
export function ap<F, G extends URIS3, E>(
F: Apply<F>,
G: Apply3C<G, E>
): <R, A>(fa: HKT<F, Kind3<G, R, E, A>>) => <B>(fab: HKT<F, Kind3<G, R, E, (a: A) => B>>) => HKT<F, Kind3<G, R, E, B>>
export function ap<F, G extends URIS2>(
F: Apply<F>,
G: Apply2<G>
Expand Down