diff --git a/docs/modules/Iso.ts.md b/docs/modules/Iso.ts.md index 043f907..83807d7 100644 --- a/docs/modules/Iso.ts.md +++ b/docs/modules/Iso.ts.md @@ -216,7 +216,7 @@ Added in v2.3.8 **Signature** ```ts -export declare const modify: (f: (a: A) => A) => (sa: Iso) => (s: S) => S +export declare const modify: (f: (a: A) => B) => (sa: Iso) => (s: S) => S ``` Added in v2.3.0 diff --git a/docs/modules/Optional.ts.md b/docs/modules/Optional.ts.md index e7285e0..9b35ecd 100644 --- a/docs/modules/Optional.ts.md +++ b/docs/modules/Optional.ts.md @@ -221,7 +221,7 @@ Added in v2.3.0 **Signature** ```ts -export declare const modify: (f: (a: A) => A) => (optional: Optional) => (s: S) => S +export declare const modify: (f: (a: A) => B) => (optional: Optional) => (s: S) => S ``` Added in v2.3.0 @@ -252,7 +252,9 @@ Added in v2.3.5 **Signature** ```ts -export declare const modifyOption: (f: (a: A) => A) => (optional: Optional) => (s: S) => O.Option +export declare const modifyOption: ( + f: (a: A) => B +) => (optional: Optional) => (s: S) => O.Option ``` Added in v2.3.0 diff --git a/docs/modules/Prism.ts.md b/docs/modules/Prism.ts.md index 74379d7..55456c8 100644 --- a/docs/modules/Prism.ts.md +++ b/docs/modules/Prism.ts.md @@ -218,7 +218,7 @@ Added in v2.3.0 **Signature** ```ts -export declare const modify: (f: (a: A) => A) => (sa: Prism) => (s: S) => S +export declare const modify: (f: (a: A) => B) => (sa: Prism) => (s: S) => S ``` Added in v2.3.0 @@ -249,7 +249,7 @@ Added in v2.3.5 **Signature** ```ts -export declare const modifyOption: (f: (a: A) => A) => (sa: Prism) => (s: S) => O.Option +export declare const modifyOption: (f: (a: A) => B) => (sa: Prism) => (s: S) => O.Option ``` Added in v2.3.0 diff --git a/docs/modules/Traversal.ts.md b/docs/modules/Traversal.ts.md index ad1058e..e3593dc 100644 --- a/docs/modules/Traversal.ts.md +++ b/docs/modules/Traversal.ts.md @@ -240,7 +240,7 @@ Added in v2.3.0 **Signature** ```ts -export declare const modify: (f: (a: A) => A) => (sa: Traversal) => (s: S) => S +export declare const modify: (f: (a: A) => B) => (sa: Traversal) => (s: S) => S ``` Added in v2.3.0 diff --git a/dtslint/ts3.5/Iso.ts b/dtslint/ts3.5/Iso.ts new file mode 100644 index 0000000..780b7c5 --- /dev/null +++ b/dtslint/ts3.5/Iso.ts @@ -0,0 +1,25 @@ +import * as _ from '../../src/Iso' +import { pipe } from 'fp-ts/lib/pipeable' + +interface A { + a: string + b: number + c: string | boolean +} + +declare const isoC: _.Iso + +// +// modify +// + +// $ExpectType (s: A) => A +pipe(isoC, _.modify(( + a // $ExpectType string | boolean +) => a)) + +// $ExpectType (s: A) => A +pipe(isoC, _.modify(() => 'foo')) + +// $ExpectType (s: A) => A +pipe(isoC, _.modify(() => 'foo')) diff --git a/dtslint/ts3.5/Lens.ts b/dtslint/ts3.5/Lens.ts index 971cc05..4001cbc 100644 --- a/dtslint/ts3.5/Lens.ts +++ b/dtslint/ts3.5/Lens.ts @@ -7,20 +7,22 @@ interface A { c: string | boolean } +declare const lensC: L.Lens + // // modify // // $ExpectType (s: A) => A -pipe(L.id(), L.prop('c'), L.modify(( +pipe(lensC, L.modify(( a // $ExpectType string | boolean ) => a)) // $ExpectType (s: A) => A -pipe(L.id(), L.prop('c'), L.modify(() => 'foo')) +pipe(lensC, L.modify(() => 'foo')) // $ExpectType (s: A) => A -pipe(L.id(), L.prop('c'), L.modify(() => 'foo')) +pipe(lensC, L.modify(() => 'foo')) // // prop diff --git a/dtslint/ts3.5/Optional.ts b/dtslint/ts3.5/Optional.ts index 5917f1f..6bd438e 100644 --- a/dtslint/ts3.5/Optional.ts +++ b/dtslint/ts3.5/Optional.ts @@ -4,9 +4,41 @@ import { pipe } from 'fp-ts/lib/pipeable' interface A { a: string b: number - c: boolean + c: string | boolean } +declare const optionalC: O.Optional + +// +// modifyOption +// + +// $ExpectType (s: A) => Option +pipe(optionalC, O.modifyOption(( + a // $ExpectType string | boolean +) => a)) + +// $ExpectType (s: A) => Option +pipe(optionalC, O.modifyOption(() => 'foo')) + +// $ExpectType (s: A) => Option +pipe(optionalC, O.modifyOption(() => 'foo')) + +// +// modify +// + +// $ExpectType (s: A) => A +pipe(optionalC, O.modify(( + a // $ExpectType string | boolean +) => a)) + +// $ExpectType (s: A) => A +pipe(optionalC, O.modify(() => 'foo')) + +// $ExpectType (s: A) => A +pipe(optionalC, O.modify(() => 'foo')) + // $ExpectError pipe(O.id(), O.props()) // $ExpectError diff --git a/dtslint/ts3.5/Prism.ts b/dtslint/ts3.5/Prism.ts index 20840d3..7c11363 100644 --- a/dtslint/ts3.5/Prism.ts +++ b/dtslint/ts3.5/Prism.ts @@ -4,9 +4,45 @@ import { pipe } from 'fp-ts/lib/pipeable' interface A { a: string b: number - c: boolean + c: string | boolean } +declare const prismC: P.Prism + +// +// modifyOption +// + +// $ExpectType (s: A) => Option +pipe(prismC, P.modifyOption(( + a // $ExpectType string | boolean +) => a)) + +// $ExpectType (s: A) => Option +pipe(prismC, P.modifyOption(() => 'foo')) + +// $ExpectType (s: A) => Option +pipe(prismC, P.modifyOption(() => 'foo')) + +// +// modify +// + +// $ExpectType (s: A) => A +pipe(prismC, P.modify(( + a // $ExpectType string | boolean +) => a)) + +// $ExpectType (s: A) => A +pipe(prismC, P.modify(() => 'foo')) + +// $ExpectType (s: A) => A +pipe(prismC, P.modify(() => 'foo')) + +// +// props +// + // $ExpectError pipe(P.id(), P.props()) // $ExpectError diff --git a/dtslint/ts3.5/Traversal.ts b/dtslint/ts3.5/Traversal.ts index e6169cf..0fc122b 100644 --- a/dtslint/ts3.5/Traversal.ts +++ b/dtslint/ts3.5/Traversal.ts @@ -4,9 +4,26 @@ import { pipe } from 'fp-ts/lib/pipeable' interface A { a: string b: number - c: boolean + c: string | boolean } +declare const traversalC: T.Traversal + +// +// modify +// + +// $ExpectType (s: A) => A +pipe(traversalC, T.modify(( + a // $ExpectType string | boolean +) => a)) + +// $ExpectType (s: A) => A +pipe(traversalC, T.modify(() => 'foo')) + +// $ExpectType (s: A) => A +pipe(traversalC, T.modify(() => 'foo')) + // $ExpectError pipe(T.id(), T.props()) // $ExpectError diff --git a/src/Iso.ts b/src/Iso.ts index 0068f9f..b5d83d3 100644 --- a/src/Iso.ts +++ b/src/Iso.ts @@ -168,7 +168,8 @@ export const reverse = (sa: Iso): Iso => iso(sa.reverseGet, sa * @category combinators * @since 2.3.0 */ -export const modify = (f: (a: A) => A) => (sa: Iso) => (s: S): S => sa.reverseGet(f(sa.get(s))) +export const modify = (f: (a: A) => B) => (sa: Iso) => (s: S): S => + sa.reverseGet(f(sa.get(s))) /** * @category combinators diff --git a/src/Optional.ts b/src/Optional.ts index 3c70b50..cf9c0f3 100644 --- a/src/Optional.ts +++ b/src/Optional.ts @@ -149,8 +149,9 @@ export const composeTraversal = (ab: Traversal): ((sa: Optional(f: (a: A) => A) => (optional: Optional) => (s: S) => Option = - _.optionalModifyOption +export const modifyOption: ( + f: (a: A) => B +) => (optional: Optional) => (s: S) => Option = _.optionalModifyOption /** * @category combinators @@ -162,7 +163,8 @@ export const setOption = (a: A): ((optional: Optional) => (s: S) => * @category combinators * @since 2.3.0 */ -export const modify: (f: (a: A) => A) => (optional: Optional) => (s: S) => S = _.optionalModify +export const modify: (f: (a: A) => B) => (optional: Optional) => (s: S) => S = + _.optionalModify /** * @category combinators diff --git a/src/Prism.ts b/src/Prism.ts index 59a2bb2..00bc0bb 100644 --- a/src/Prism.ts +++ b/src/Prism.ts @@ -163,13 +163,14 @@ export const set: (a: A) => (sa: Prism) => (s: S) => S = _.prismSet * @category combinators * @since 2.3.0 */ -export const modifyOption: (f: (a: A) => A) => (sa: Prism) => (s: S) => Option = _.prismModifyOption +export const modifyOption: (f: (a: A) => B) => (sa: Prism) => (s: S) => Option = + _.prismModifyOption /** * @category combinators * @since 2.3.0 */ -export const modify: (f: (a: A) => A) => (sa: Prism) => (s: S) => S = _.prismModify +export const modify: (f: (a: A) => B) => (sa: Prism) => (s: S) => S = _.prismModify /** * @category combinators diff --git a/src/Traversal.ts b/src/Traversal.ts index 9293148..105737c 100644 --- a/src/Traversal.ts +++ b/src/Traversal.ts @@ -155,7 +155,7 @@ export const composeOptional: (ab: Optional) => (sa: Traversal(f: (a: A) => A) => (sa: Traversal): ((s: S) => S) => +export const modify = (f: (a: A) => B) => (sa: Traversal): ((s: S) => S) => sa.modifyF(_.ApplicativeIdentity)(f) /** diff --git a/src/internal.ts b/src/internal.ts index 8bf73c7..4e7c15c 100644 --- a/src/internal.ts +++ b/src/internal.ts @@ -169,7 +169,7 @@ export const prismAsTraversal = (sa: Prism): Traversal => ) /** @internal */ -export const prismModifyOption = (f: (a: A) => A) => (sa: Prism) => (s: S): O.Option => +export const prismModifyOption = (f: (a: A) => B) => (sa: Prism) => (s: S): O.Option => pipe( sa.getOption(s), O.map((o) => { @@ -179,7 +179,7 @@ export const prismModifyOption = (f: (a: A) => A) => (sa: Prism) => ) /** @internal */ -export const prismModify = (f: (a: A) => A) => (sa: Prism): ((s: S) => S) => { +export const prismModify = (f: (a: A) => B) => (sa: Prism): ((s: S) => S) => { const g = prismModifyOption(f)(sa) return (s) => pipe( @@ -238,7 +238,9 @@ export const optionalAsTraversal = (sa: Optional): Traversal = ) /** @internal */ -export const optionalModifyOption = (f: (a: A) => A) => (optional: Optional) => (s: S): O.Option => +export const optionalModifyOption = (f: (a: A) => B) => (optional: Optional) => ( + s: S +): O.Option => pipe( optional.getOption(s), O.map((a) => { @@ -248,7 +250,7 @@ export const optionalModifyOption = (f: (a: A) => A) => (optional: Optiona ) /** @internal */ -export const optionalModify = (f: (a: A) => A) => (optional: Optional): ((s: S) => S) => { +export const optionalModify = (f: (a: A) => B) => (optional: Optional): ((s: S) => S) => { const g = optionalModifyOption(f)(optional) return (s) => pipe(