Tests
Some checks failed
Lint / lint (push) Failing after 12s

This commit is contained in:
Julien Valverdé
2026-03-23 21:00:40 +01:00
parent 3f05a5099e
commit 11d23aa10c

View File

@@ -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") export const LensTypeId: unique symbol = Symbol.for("@effect-fc/Lens/Lens")
@@ -81,8 +81,8 @@ export const map = <A, ER, RR, EW, RW, B>(
}, },
}, },
): Lens<B, ER, RR, EW, RW> => make({ ): Lens<B, ER, RR, EW, RW> => make({
get: Effect.map(self.get, options.get), get get() { return Effect.map(self.get, options.get) },
changes: Stream.map(self.changes, options.get), get changes() { return Stream.map(self.changes, options.get) },
modify: <C, E1 = never, R1 = never>( modify: <C, E1 = never, R1 = never>(
f: (b: B) => Effect.Effect<readonly [C, B], E1, R1> f: (b: B) => Effect.Effect<readonly [C, B], E1, R1>
) => self.modify(a => ) => self.modify(a =>
@@ -104,26 +104,24 @@ export const mapEffect = <A, ER, RR, EW, RW, B, EGet = never, RGet = never, ESet
(parent: A, b: B): 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> => make({
return make({ get get() { return Effect.flatMap(self.get, options.get) },
get: Effect.flatMap(self.get, options.get), get changes() { return Stream.mapEffect(self.changes, options.get) },
changes: Stream.mapEffect(self.changes, options.get), modify: <C, E1 = never, R1 = never>(
modify: <C, E1 = never, R1 = never>( f: (b: B) => Effect.Effect<readonly [C, B], E1, R1>
f: (b: B) => Effect.Effect<readonly [C, B], E1, R1> ) => self.modify(a => Effect.flatMap(
) => self.modify(a => Effect.flatMap( options.get(a),
options.get(a), b => Effect.flatMap(
b => Effect.flatMap( f(b),
f(b), ([c, bNext]) => Effect.flatMap(
([c, bNext]) => Effect.flatMap( options.set.length >= 2
options.set.length >= 2 ? (options.set as (parent: A, b: B) => Effect.Effect<A, ESet, RSet>)(a, bNext)
? (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),
: (options.set as (b: B) => (parent: A) => Effect.Effect<A, ESet, RSet>)(bNext)(a), nextA => Effect.succeed([c, nextA] as const),
nextA => Effect.succeed([c, nextA] as const), ),
), )
) )),
)), })
})
}
export const unwrap = <A, ER, RR, EW, RW, E1, R1>( export const unwrap = <A, ER, RR, EW, RW, E1, R1>(
effect: Effect.Effect<Lens<A, ER, RR, EW, RW>, E1, R1> effect: Effect.Effect<Lens<A, ER, RR, EW, RW>, E1, R1>
@@ -134,3 +132,12 @@ export const unwrap = <A, ER, RR, EW, RW, E1, R1>(
f: (a: A) => Effect.Effect<readonly [B, A], E2, R2> f: (a: A) => Effect.Effect<readonly [B, A], E2, R2>
) => Effect.flatMap(effect, l => l.modify(f)), ) => 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
)