Skip to content

Commit e51c2a5

Browse files
committed
Optional: add setOption
1 parent e39570e commit e51c2a5

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ high state of flux, you're at risk of it changing without notice.
3030
- `Optional`
3131
- add `composeLens` (@gcanti)
3232
- add `composePrism` (@gcanti)
33+
- add `setOption` (@gcanti)
3334

3435
# 2.3.6
3536

docs/modules/Optional.ts.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Added in v2.3.0
4747
- [prop](#prop)
4848
- [props](#props)
4949
- [right](#right)
50+
- [setOption](#setoption)
5051
- [some](#some)
5152
- [traverse](#traverse)
5253
- [compositions](#compositions)
@@ -262,6 +263,16 @@ export declare const right: <S, E, A>(sea: Optional<S, Either<E, A>>) => Optiona
262263

263264
Added in v2.3.0
264265

266+
## setOption
267+
268+
**Signature**
269+
270+
```ts
271+
export declare const setOption: <A>(a: A) => <S>(optional: Optional<S, A>) => (s: S) => O.Option<S>
272+
```
273+
274+
Added in v2.3.7
275+
265276
## some
266277

267278
Return a `Optional` from a `Optional` focused on the `Some` of a `Option` type.

src/Optional.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ export const composePrism = <A, B>(ab: Prism<A, B>) => <S>(sa: Optional<S, A>):
115115
export const modifyOption: <A>(f: (a: A) => A) => <S>(optional: Optional<S, A>) => (s: S) => Option<S> =
116116
_.optionalModifyOption
117117

118+
/**
119+
* @category combinators
120+
* @since 2.3.7
121+
*/
122+
export const setOption = <A>(a: A): (<S>(optional: Optional<S, A>) => (s: S) => Option<S>) => modifyOption(() => a)
123+
118124
/**
119125
* @category combinators
120126
* @since 2.3.0

test/Optional.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,10 @@ describe('Optional', () => {
191191
assert.deepStrictEqual(f([1, 2, 3]), O.some([2, 2, 3]))
192192
assert.deepStrictEqual(f([-1, 2, 3]), O.none)
193193
})
194+
195+
it('setOption', () => {
196+
const sa = pipe(_.id<ReadonlyArray<number>>(), _.index(0))
197+
assert.deepStrictEqual(pipe(sa, _.setOption(2))([]), O.none)
198+
assert.deepStrictEqual(pipe(sa, _.setOption(2))([1, 3]), O.some([2, 3]))
199+
})
194200
})

0 commit comments

Comments
 (0)