| 51 | * @since 0.24.0 |
| 52 | */ |
| 53 | export const composeK = <F extends TypeLambda>( |
| 54 | F: FlatMap<F> |
| 55 | ): { |
| 56 | <B, R2, O2, E2, C>( |
| 57 | bfc: (b: B) => Kind<F, R2, O2, E2, C> |
| 58 | ): <A, R1, O1, E1>( |
| 59 | afb: (a: A) => Kind<F, R1, O1, E1, B> |
| 60 | ) => (a: A) => Kind<F, R1 & R2, O2 | O1, E2 | E1, C> |
| 61 | <A, R1, O1, E1, B, R2, O2, E2, C>( |
| 62 | afb: (a: A) => Kind<F, R1, O1, E1, B>, |
| 63 | bfc: (b: B) => Kind<F, R2, O2, E2, C> |
| 64 | ): (a: A) => Kind<F, R1 & R2, O1 | O2, E1 | E2, C> |
| 65 | } => |
| 66 | dual( |
| 67 | 2, |
| 68 | <A, R1, O1, E1, B, R2, O2, E2, C>( |
| 69 | afb: (a: A) => Kind<F, R1, O1, E1, B>, |
| 70 | bfc: (b: B) => Kind<F, R2, O2, E2, C> |
| 71 | ): (a: A) => Kind<F, R1 & R2, O1 | O2, E1 | E2, C> => |
| 72 | (a) => F.flatMap(afb(a), bfc) |
| 73 | ) |