@@ -73,26 +73,27 @@ export const fromSubscriptionRef = <A>(
|
|||||||
|
|
||||||
export const map = <A, ER, RR, EW, RW, B>(
|
export const map = <A, ER, RR, EW, RW, B>(
|
||||||
self: Lens<A, ER, RR, EW, RW>,
|
self: Lens<A, ER, RR, EW, RW>,
|
||||||
get: (a: A) => B,
|
options: {
|
||||||
set: {
|
readonly get: (a: A) => B,
|
||||||
|
readonly set: {
|
||||||
(b: B): (parent: A) => A
|
(b: B): (parent: A) => A
|
||||||
(parent: A, b: B): A
|
(parent: A, b: B): A
|
||||||
},
|
},
|
||||||
): Lens<B, ER, RR, EW, RW> => {
|
}
|
||||||
const setF = (parent: A, b: B) => set.length >= 2
|
): Lens<B, ER, RR, EW, RW> => make({
|
||||||
? (set as (parent: A, b: B) => A)(parent, b)
|
get: Effect.map(self.get, options.get),
|
||||||
: (set as (b: B) => (parent: A) => A)(b)(parent)
|
changes: Stream.map(self.changes, options.get),
|
||||||
|
|
||||||
return make({
|
|
||||||
get: Effect.map(self.get, get),
|
|
||||||
changes: Stream.map(self.changes, get),
|
|
||||||
modify: <C, E1 = never, R1 = never>(
|
modify: <C, E1 = never, R1 = never>(
|
||||||
f: (b: B) => Effect.Effect<readonly [C, B], E1, R1>
|
f: (b: B) => Effect.Effect<readonly [C, B], E1, R1>
|
||||||
) => self.modify(a =>
|
) => self.modify(a =>
|
||||||
Effect.flatMap(f(get(a)), ([c, next]) => Effect.succeed([c, setF(a, next)] as const))
|
Effect.flatMap(f(options.get(a)), ([c, next]) => Effect.succeed([
|
||||||
|
c,
|
||||||
|
options.set.length >= 2
|
||||||
|
? (options.set as (parent: A, b: B) => A)(a, next)
|
||||||
|
: (options.set as (b: B) => (parent: A) => A)(next)(a),
|
||||||
|
] as const))
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
}
|
|
||||||
|
|
||||||
export const mapEffect = <A, ER, RR, EW, RW, B, EGet = never, RGet = never, ESet = never, RSet = never>(
|
export const mapEffect = <A, ER, RR, EW, RW, B, EGet = never, RGet = never, ESet = never, RSet = never>(
|
||||||
self: Lens<A, ER, RR, EW, RW>,
|
self: Lens<A, ER, RR, EW, RW>,
|
||||||
|
|||||||
Reference in New Issue
Block a user