From 3f05a5099efa329820564e5d717e2fe5b355e9bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 23 Mar 2026 20:51:45 +0100 Subject: [PATCH] Fix --- packages/effect-fc/src/Lens.ts | 38 ++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/packages/effect-fc/src/Lens.ts b/packages/effect-fc/src/Lens.ts index a4c653b..ce7933c 100644 --- a/packages/effect-fc/src/Lens.ts +++ b/packages/effect-fc/src/Lens.ts @@ -79,7 +79,7 @@ export const map = ( (b: B): (parent: A) => A (parent: A, b: B): A }, - } + }, ): Lens => make({ get: Effect.map(self.get, options.get), changes: Stream.map(self.changes, options.get), @@ -91,25 +91,37 @@ export const map = ( 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 = ( self: Lens, - getF: (a: A) => Effect.Effect, - setF: (b: B, parent: A) => Effect.Effect, + options: { + readonly get: (a: A) => Effect.Effect, + readonly set: { + (b: B): (parent: A) => Effect.Effect + (parent: A, b: B): Effect.Effect + }, + }, ): Lens => { - const get = Effect.flatMap(self.get, getF) - const changes = Stream.mapEffect(self.changes, getF) - const modify = ( - h: (b: B) => Effect.Effect - ) => 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({ - get: Effect.flatMap(self.get, getF), - changes: Stream.mapEffect(self.changes, getF), - modify, + get: Effect.flatMap(self.get, options.get), + changes: Stream.mapEffect(self.changes, options.get), + modify: ( + f: (b: B) => Effect.Effect + ) => 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, bNext) + : (options.set as (b: B) => (parent: A) => Effect.Effect)(bNext)(a), + nextA => Effect.succeed([c, nextA] as const), + ), + ) + )), }) }