Add mapStructAt
Some checks failed
Lint / lint (push) Failing after 15s

This commit is contained in:
Julien Valverdé
2026-03-24 09:17:31 +01:00
parent 7f18fc5553
commit e175eac701

View File

@@ -137,6 +137,23 @@ export const mapEffect: {
)),
}))
export const mapStructAt: {
<A extends object, K extends keyof A, ER, EW, RR, RW>(
self: Lens<A, ER, EW, RR, RW>,
key: K,
): Lens<A[K], ER, EW, RR, RW>
<A extends object, K extends keyof A, ER, EW, RR, RW>(
key: K,
): (self: Lens<A, ER, EW, RR, RW>) => Lens<A[K], ER, EW, RR, RW>
} = Function.dual(2, <A extends object, K extends keyof A, ER, EW, RR, RW>(
self: Lens<A, ER, EW, RR, RW>,
key: K,
): Lens<A[K], ER, EW, RR, RW> => map(
self,
a => a[key],
(a, b) => Object.setPrototypeOf({ ...a, [key]: b }, Object.getPrototypeOf(a)),
))
export const mapArrayAt: {
<A, ER, EW, RR, RW>(
self: Lens<readonly A[], ER, EW, RR, RW>,
@@ -275,14 +292,15 @@ Effect.gen(function*() {
values: [13, 69, 1488]
})
const myValueLens = myChunkRef.pipe(
const myValueLens = ref.pipe(
fromSubscriptionRef,
mapChunkAt(1),
mapStructAt("values"),
mapArrayAt(1),
)
console.log(yield* myChunkRef.get, yield* chunkValueLens.get)
yield* set(chunkValueLens, 22)
console.log(yield* myChunkRef.get, yield* chunkValueLens.get)
console.log(yield* ref.get, yield* myValueLens.get)
yield* set(myValueLens, 22)
console.log(yield* ref.get, yield* myValueLens.get)
}).pipe(
Effect.runSync
)