diff --git a/packages/effect-fc/src/Lens.ts b/packages/effect-fc/src/Lens.ts index 4f5dde2..a4c653b 100644 --- a/packages/effect-fc/src/Lens.ts +++ b/packages/effect-fc/src/Lens.ts @@ -73,26 +73,27 @@ export const fromSubscriptionRef = ( export const map = ( self: Lens, - get: (a: A) => B, - set: { - (b: B): (parent: A) => A - (parent: A, b: B): A - }, -): Lens => { - const setF = (parent: A, b: B) => set.length >= 2 - ? (set as (parent: A, b: B) => A)(parent, b) - : (set as (b: B) => (parent: A) => A)(b)(parent) - - return make({ - get: Effect.map(self.get, get), - changes: Stream.map(self.changes, get), - modify: ( - f: (b: B) => Effect.Effect - ) => self.modify(a => - Effect.flatMap(f(get(a)), ([c, next]) => Effect.succeed([c, setF(a, next)] as const)) - ), - }) -} + options: { + readonly get: (a: A) => B, + readonly set: { + (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), + modify: ( + f: (b: B) => Effect.Effect + ) => self.modify(a => + 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 = ( self: Lens,