From 11d23aa10c2f99c5abdec4d7903fbfa1a42d14fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 23 Mar 2026 21:00:40 +0100 Subject: [PATCH] Tests --- packages/effect-fc/src/Lens.ts | 53 +++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/packages/effect-fc/src/Lens.ts b/packages/effect-fc/src/Lens.ts index ce7933c..4e3230f 100644 --- a/packages/effect-fc/src/Lens.ts +++ b/packages/effect-fc/src/Lens.ts @@ -1,4 +1,4 @@ -import { Effect, Pipeable, Predicate, Readable, Stream, Subscribable, type SubscriptionRef } from "effect" +import { Array, Effect, Pipeable, Predicate, Readable, Stream, Subscribable, SubscriptionRef } from "effect" export const LensTypeId: unique symbol = Symbol.for("@effect-fc/Lens/Lens") @@ -81,8 +81,8 @@ export const map = ( }, }, ): Lens => make({ - get: Effect.map(self.get, options.get), - changes: Stream.map(self.changes, options.get), + get get() { return Effect.map(self.get, options.get) }, + get changes() { return Stream.map(self.changes, options.get) }, modify: ( f: (b: B) => Effect.Effect ) => self.modify(a => @@ -104,26 +104,24 @@ export const mapEffect = }, }, -): Lens => { - return make({ - 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), - ), - ) - )), - }) -} +): Lens => make({ + get get() { return Effect.flatMap(self.get, options.get) }, + get changes() { return 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), + ), + ) + )), +}) export const unwrap = ( effect: Effect.Effect, E1, R1> @@ -134,3 +132,12 @@ export const unwrap = ( f: (a: A) => Effect.Effect ) => Effect.flatMap(effect, l => l.modify(f)), }) + + +Effect.gen(function*() { + const myArrayRef = yield* SubscriptionRef.make([12, 38, 69]) + const myArrayLens = fromSubscriptionRef(myArrayRef) + const valueLens = mapEffect(myArrayLens, { get: Array.get(1), set: (a, b) => Array.replace(a, 1, b) }) +}).pipe( + Effect.runSync +)