diff --git a/src/ReaderTaskEither.ts b/src/ReaderTaskEither.ts index dfa68bca6..1158c1de0 100644 --- a/src/ReaderTaskEither.ts +++ b/src/ReaderTaskEither.ts @@ -1156,6 +1156,24 @@ export const chainEitherKW: ( f: (a: A) => Either ) => (ma: ReaderTaskEither) => ReaderTaskEither = chainEitherK as any +/** + * Less strict version of [`chainFirstEitherK`](#chainfirsteitherk). + * + * @category combinators + * @since 2.12.0 + */ +export const chainFirstEitherKW: ( + f: (a: A) => Either +) => (ma: ReaderTaskEither) => ReaderTaskEither = (f) => chainFirstW(fromEitherK(f)) + +/** + * @category combinators + * @since 2.12.0 + */ +export const chainFirstEitherK: ( + f: (a: A) => Either +) => (ma: ReaderTaskEither) => ReaderTaskEither = chainFirstEitherKW + /** * @category constructors * @since 2.0.0 diff --git a/test/ReaderTaskEither.ts b/test/ReaderTaskEither.ts index e9d94ee09..a4047727d 100644 --- a/test/ReaderTaskEither.ts +++ b/test/ReaderTaskEither.ts @@ -420,6 +420,11 @@ describe('ReaderTaskEither', () => { U.deepStrictEqual(await pipe(_.right('a'), _.chainEitherK(f))(undefined)(), E.right(1)) }) + it('chainFirstEitherKW', async () => { + const f = (s: string) => E.right(s.length) + U.deepStrictEqual(await pipe(_.right<{}, number, string>('a'), _.chainFirstEitherKW(f))({})(), E.right('a')) + }) + it('chainIOEitherK', async () => { const f = (s: string) => IE.right(s.length) U.deepStrictEqual(await pipe(_.right('a'), _.chainIOEitherK(f))(undefined)(), E.right(1))