0.2.5 #43
@@ -79,7 +79,7 @@ export const map = <A, ER, RR, EW, RW, B>(
|
|||||||
(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> => make({
|
): Lens<B, ER, RR, EW, RW> => make({
|
||||||
get: Effect.map(self.get, options.get),
|
get: Effect.map(self.get, options.get),
|
||||||
changes: Stream.map(self.changes, options.get),
|
changes: Stream.map(self.changes, options.get),
|
||||||
@@ -91,25 +91,37 @@ export const map = <A, ER, RR, EW, RW, B>(
|
|||||||
options.set.length >= 2
|
options.set.length >= 2
|
||||||
? (options.set as (parent: A, b: B) => A)(a, next)
|
? (options.set as (parent: A, b: B) => A)(a, next)
|
||||||
: (options.set as (b: B) => (parent: A) => A)(next)(a),
|
: (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>,
|
||||||
getF: (a: A) => Effect.Effect<B, EGet, RGet>,
|
options: {
|
||||||
setF: (b: B, parent: A) => Effect.Effect<A, ESet, RSet>,
|
readonly get: (a: A) => Effect.Effect<B, EGet, RGet>,
|
||||||
|
readonly set: {
|
||||||
|
(b: B): (parent: A) => Effect.Effect<A, ESet, RSet>
|
||||||
|
(parent: A, b: B): Effect.Effect<A, ESet, RSet>
|
||||||
|
},
|
||||||
|
},
|
||||||
): Lens<B, ER | EGet, RR | RGet, EW | ESet, RW | RSet> => {
|
): Lens<B, ER | EGet, RR | RGet, EW | ESet, RW | RSet> => {
|
||||||
const get = Effect.flatMap(self.get, getF)
|
|
||||||
const changes = Stream.mapEffect(self.changes, getF)
|
|
||||||
const modify = <C, E1 = never, R1 = never>(
|
|
||||||
h: (b: B) => Effect.Effect<readonly [C, B], E1, R1>
|
|
||||||
) => self.modify((a: A) => Effect.flatMap(getF(a), b => Effect.flatMap(h(b), ([c, bNext]) => Effect.flatMap(setF(bNext, a), nextA => Effect.succeed([c, nextA] as const)))))
|
|
||||||
|
|
||||||
return make({
|
return make({
|
||||||
get: Effect.flatMap(self.get, getF),
|
get: Effect.flatMap(self.get, options.get),
|
||||||
changes: Stream.mapEffect(self.changes, getF),
|
changes: Stream.mapEffect(self.changes, options.get),
|
||||||
modify,
|
modify: <C, E1 = never, R1 = never>(
|
||||||
|
f: (b: B) => Effect.Effect<readonly [C, B], E1, R1>
|
||||||
|
) => self.modify(a => Effect.flatMap(
|
||||||
|
options.get(a),
|
||||||
|
b => Effect.flatMap(
|
||||||
|
f(b),
|
||||||
|
([c, bNext]) => Effect.flatMap(
|
||||||
|
options.set.length >= 2
|
||||||
|
? (options.set as (parent: A, b: B) => Effect.Effect<A, ESet, RSet>)(a, bNext)
|
||||||
|
: (options.set as (b: B) => (parent: A) => Effect.Effect<A, ESet, RSet>)(bNext)(a),
|
||||||
|
nextA => Effect.succeed([c, nextA] as const),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user