Skip to content

Commit

Permalink
feat: flatMapReaderIO
Browse files Browse the repository at this point in the history
  • Loading branch information
sukovanej authored and gcanti committed May 23, 2023
1 parent 3e17b34 commit e2a3878
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 78 deletions.
74 changes: 46 additions & 28 deletions docs/modules/ReaderTask.ts.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ Added in v2.3.0
- [chainFirstTaskK](#chainfirsttaskk)
- [chainFirstW](#chainfirstw)
- [chainIOK](#chainiok)
- [chainReaderIOK](#chainreaderiok)
- [chainReaderIOKW](#chainreaderiokw)
- [chainReaderK](#chainreaderk)
- [chainReaderKW](#chainreaderkw)
- [chainTaskK](#chaintaskk)
Expand All @@ -79,11 +81,10 @@ Added in v2.3.0
- [model](#model)
- [ReaderTask (interface)](#readertask-interface)
- [sequencing](#sequencing)
- [chainReaderIOK](#chainreaderiok)
- [chainReaderIOKW](#chainreaderiokw)
- [flatMap](#flatmap)
- [flatMapIO](#flatmapio)
- [flatMapReader](#flatmapreader)
- [flatMapReaderIO](#flatmapreaderio)
- [flatMapTask](#flatmaptask)
- [flatten](#flatten)
- [flattenW](#flattenw)
Expand Down Expand Up @@ -715,6 +716,36 @@ export declare const chainIOK: <A, B>(f: (a: A) => IO<B>) => <R>(first: ReaderTa

Added in v2.4.0

## chainReaderIOK

Alias of `flatMapReaderIO`.

**Signature**

```ts
export declare const chainReaderIOK: <A, R, B>(
f: (a: A) => RIO.ReaderIO<R, B>
) => (ma: ReaderTask<R, A>) => ReaderTask<R, B>
```

Added in v2.13.0

## chainReaderIOKW

Alias of `flatMapReaderIO`.

Less strict version of [`chainReaderIOK`](#chainreaderiok).

**Signature**

```ts
export declare const chainReaderIOKW: <A, R2, B>(
f: (a: A) => RIO.ReaderIO<R2, B>
) => <R1>(ma: ReaderTask<R1, A>) => ReaderTask<R1 & R2, B>
```

Added in v2.13.0

## chainReaderK

Alias of `flatMapReader`.
Expand Down Expand Up @@ -889,32 +920,6 @@ Added in v2.3.0

# sequencing

## chainReaderIOK

**Signature**

```ts
export declare const chainReaderIOK: <A, R, B>(
f: (a: A) => RIO.ReaderIO<R, B>
) => (ma: ReaderTask<R, A>) => ReaderTask<R, B>
```

Added in v2.13.0

## chainReaderIOKW

Less strict version of [`chainReaderIOK`](#chainreaderiok).

**Signature**

```ts
export declare const chainReaderIOKW: <A, R2, B>(
f: (a: A) => RIO.ReaderIO<R2, B>
) => <R1>(ma: ReaderTask<R1, A>) => ReaderTask<R1 & R2, B>
```

Added in v2.13.0

## flatMap

**Signature**
Expand Down Expand Up @@ -954,6 +959,19 @@ export declare const flatMapReader: {

Added in v2.16.0

## flatMapReaderIO

**Signature**

```ts
export declare const flatMapReaderIO: {
<A, R2, B>(f: (a: A) => RIO.ReaderIO<R2, B>): <R1>(self: ReaderTask<R1, A>) => ReaderTask<R1 & R2, B>
<R1, A, R2, B>(self: ReaderTask<R1, A>, f: (a: A) => RIO.ReaderIO<R2, B>): ReaderTask<R1 & R2, B>
}
```

Added in v2.16.0

## flatMapTask

**Signature**
Expand Down
76 changes: 48 additions & 28 deletions docs/modules/ReaderTaskEither.ts.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ Added in v2.0.0
- [chainNullableK](#chainnullablek)
- [chainOptionK](#chainoptionk)
- [chainOptionKW](#chainoptionkw)
- [chainReaderIOK](#chainreaderiok)
- [chainReaderIOKW](#chainreaderiokw)
- [chainReaderK](#chainreaderk)
- [chainReaderKW](#chainreaderkw)
- [chainReaderTaskK](#chainreadertaskk)
Expand Down Expand Up @@ -166,14 +168,13 @@ Added in v2.0.0
- [chainIOEitherKW](#chainioeitherkw)
- [chainReaderEitherK](#chainreadereitherk)
- [chainReaderEitherKW](#chainreadereitherkw)
- [chainReaderIOK](#chainreaderiok)
- [chainReaderIOKW](#chainreaderiokw)
- [flatMap](#flatmap)
- [flatMapEither](#flatmapeither)
- [flatMapIO](#flatmapio)
- [flatMapNullable](#flatmapnullable)
- [flatMapOption](#flatmapoption)
- [flatMapReader](#flatmapreader)
- [flatMapReaderIO](#flatmapreaderio)
- [flatMapReaderTask](#flatmapreadertask)
- [flatMapTask](#flatmaptask)
- [flatMapTaskEither](#flatmaptaskeither)
Expand Down Expand Up @@ -1676,6 +1677,36 @@ export declare const chainOptionKW: <E2>(

Added in v2.13.2

## chainReaderIOK

Alias of `flatMapReaderIO`.

**Signature**

```ts
export declare const chainReaderIOK: <A, R, B>(
f: (a: A) => RIO.ReaderIO<R, B>
) => <E>(ma: ReaderTaskEither<R, E, A>) => ReaderTaskEither<R, E, B>
```

Added in v2.13.0

## chainReaderIOKW

Alias of `flatMapReaderIO`.

Less strict version of [`chainReaderIOK`](#chainreaderiok).

**Signature**

```ts
export declare const chainReaderIOKW: <A, R2, B>(
f: (a: A) => RIO.ReaderIO<R2, B>
) => <R1, E>(ma: ReaderTaskEither<R1, E, A>) => ReaderTaskEither<R1 & R2, E, B>
```

Added in v2.13.0

## chainReaderK

Alias of `flatMapReader`.
Expand Down Expand Up @@ -2244,32 +2275,6 @@ export declare const chainReaderEitherKW: <R2, E2, A, B>(

Added in v2.11.0

## chainReaderIOK

**Signature**

```ts
export declare const chainReaderIOK: <A, R, B>(
f: (a: A) => RIO.ReaderIO<R, B>
) => <E>(ma: ReaderTaskEither<R, E, A>) => ReaderTaskEither<R, E, B>
```

Added in v2.13.0

## chainReaderIOKW

Less strict version of [`chainReaderIOK`](#chainreaderiok).

**Signature**

```ts
export declare const chainReaderIOKW: <A, R2, B>(
f: (a: A) => RIO.ReaderIO<R2, B>
) => <R1, E>(ma: ReaderTaskEither<R1, E, A>) => ReaderTaskEither<R1 & R2, E, B>
```

Added in v2.13.0

## flatMap

**Signature**
Expand Down Expand Up @@ -2366,6 +2371,21 @@ export declare const flatMapReader: {

Added in v2.16.0

## flatMapReaderIO

**Signature**

```ts
export declare const flatMapReaderIO: {
<A, R2, B>(f: (a: A) => RIO.ReaderIO<R2, B>): <R1, E>(
self: ReaderTaskEither<R1, E, A>
) => ReaderTaskEither<R1 & R2, E, B>
<R1, E, A, R2, B>(self: ReaderTaskEither<R1, E, A>, f: (a: A) => RIO.ReaderIO<R2, B>): ReaderTaskEither<R1 & R2, E, B>
}
```

Added in v2.16.0

## flatMapReaderTask

**Signature**
Expand Down
25 changes: 21 additions & 4 deletions src/ReaderTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,19 @@ export const flatMapReader: {
<R1, A, R2, B>(self: ReaderTask<R1, A>, f: (a: A) => R.Reader<R2, B>): ReaderTask<R1 & R2, B>
} = _.flatMapReader(_FromReader, _FlatMap)

/**
* @category sequencing
* @since 2.16.0
*/
export const flatMapReaderIO: {
<A, R2, B>(f: (a: A) => ReaderIO<R2, B>): <R1>(self: ReaderTask<R1, A>) => ReaderTask<R1 & R2, B>
<R1, A, R2, B>(self: ReaderTask<R1, A>, f: (a: A) => ReaderIO<R2, B>): ReaderTask<R1 & R2, B>
} = /*#__PURE__*/ dual(
2,
<R1, A, R2, B>(self: ReaderTask<R1, A>, f: (a: A) => ReaderIO<R2, B>): ReaderTask<R1 & R2, B> =>
flatMap(self, fromReaderIOK(f))
)

/**
* Composes computations in sequence, using the return value of one computation to determine the next computation and
* keeping only the result of the first.
Expand Down Expand Up @@ -628,21 +641,25 @@ export const fromReaderIOK =
fromReaderIO(f(...a))

/**
* Alias of `flatMapReaderIO`.
*
* Less strict version of [`chainReaderIOK`](#chainreaderiok).
*
* @category sequencing
* @category legacy
* @since 2.13.0
*/
export const chainReaderIOKW: <A, R2, B>(
f: (a: A) => ReaderIO<R2, B>
) => <R1>(ma: ReaderTask<R1, A>) => ReaderTask<R1 & R2, B> = (f) => flatMap(fromReaderIOK(f))
) => <R1>(ma: ReaderTask<R1, A>) => ReaderTask<R1 & R2, B> = flatMapReaderIO

/**
* @category sequencing
* Alias of `flatMapReaderIO`.
*
* @category legacy
* @since 2.13.0
*/
export const chainReaderIOK: <A, R, B>(f: (a: A) => ReaderIO<R, B>) => (ma: ReaderTask<R, A>) => ReaderTask<R, B> =
chainReaderIOKW
flatMapReaderIO

/**
* Alias of `tapReaderIO`.
Expand Down
53 changes: 35 additions & 18 deletions src/ReaderTaskEither.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1363,24 +1363,6 @@ export const fromReaderIOK =
(...a) =>
rightReaderIO(f(...a))

/**
* Less strict version of [`chainReaderIOK`](#chainreaderiok).
*
* @category sequencing
* @since 2.13.0
*/
export const chainReaderIOKW: <A, R2, B>(
f: (a: A) => ReaderIO<R2, B>
) => <R1, E>(ma: ReaderTaskEither<R1, E, A>) => ReaderTaskEither<R1 & R2, E, B> = (f) => flatMap(fromReaderIOK(f))

/**
* @category sequencing
* @since 2.13.0
*/
export const chainReaderIOK: <A, R, B>(
f: (a: A) => ReaderIO<R, B>
) => <E>(ma: ReaderTaskEither<R, E, A>) => ReaderTaskEither<R, E, B> = chainReaderIOKW

/**
* Alias of `tapReaderIO`.
*
Expand Down Expand Up @@ -1592,6 +1574,19 @@ export const flatMapReader: {
<R1, E, A, R2, B>(self: ReaderTaskEither<R1, E, A>, f: (a: A) => Reader<R2, B>): ReaderTaskEither<R1 & R2, E, B>
} = /*#__PURE__*/ _.flatMapReader(_FromReader, _FlatMap)

/**
* @category sequencing
* @since 2.16.0
*/
export const flatMapReaderIO: {
<A, R2, B>(f: (a: A) => ReaderIO<R2, B>): <R1, E>(self: ReaderTaskEither<R1, E, A>) => ReaderTaskEither<R1 & R2, E, B>
<R1, E, A, R2, B>(self: ReaderTaskEither<R1, E, A>, f: (a: A) => ReaderIO<R2, B>): ReaderTaskEither<R1 & R2, E, B>
} = /*#__PURE__*/ dual(
2,
<R1, E, A, R2, B>(self: ReaderTaskEither<R1, E, A>, f: (a: A) => ReaderIO<R2, B>): ReaderTaskEither<R1 & R2, E, B> =>
flatMap(self, fromReaderIOK(f))
)

/**
* Alias of `flatMapEither`.
*
Expand Down Expand Up @@ -1819,6 +1814,28 @@ export const chainReaderKW: <A, R1, B>(
f: (a: A) => R.Reader<R1, B>
) => <R2, E>(ma: ReaderTaskEither<R2, E, A>) => ReaderTaskEither<R1 & R2, E, B> = flatMapReader

/**
* Alias of `flatMapReaderIO`.
*
* Less strict version of [`chainReaderIOK`](#chainreaderiok).
*
* @category legacy
* @since 2.13.0
*/
export const chainReaderIOKW: <A, R2, B>(
f: (a: A) => ReaderIO<R2, B>
) => <R1, E>(ma: ReaderTaskEither<R1, E, A>) => ReaderTaskEither<R1 & R2, E, B> = flatMapReaderIO

/**
* Alias of `flatMapReaderIO`.
*
* @category legacy
* @since 2.13.0
*/
export const chainReaderIOK: <A, R, B>(
f: (a: A) => ReaderIO<R, B>
) => <E>(ma: ReaderTaskEither<R, E, A>) => ReaderTaskEither<R, E, B> = flatMapReaderIO

// -------------------------------------------------------------------------------------
// utils
// -------------------------------------------------------------------------------------
Expand Down
4 changes: 4 additions & 0 deletions test/ReaderTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -338,4 +338,8 @@ describe.concurrent('ReaderTask', () => {
it('flatMapReader', async () => {
U.deepStrictEqual(await _.flatMapReader(_.of(1), () => R.of(2))(undefined)(), 2)
})

it('flatMapReaderIO', async () => {
U.deepStrictEqual(await _.flatMapReaderIO(_.of(1), () => RIO.of(2))(undefined)(), 2)
})
})
4 changes: 4 additions & 0 deletions test/ReaderTaskEither.ts
Original file line number Diff line number Diff line change
Expand Up @@ -819,4 +819,8 @@ describe.concurrent('ReaderTaskEither', () => {
it('flatMapReader', async () => {
U.deepStrictEqual(await _.flatMapReader(_.of(1), () => R.of(2))(undefined)(), E.of(2))
})

it('flatMapReaderIO', async () => {
U.deepStrictEqual(await _.flatMapReaderIO(_.of(1), () => RIO.of(2))(undefined)(), E.of(2))
})
})

0 comments on commit e2a3878

Please sign in to comment.