From eea6bcac4de93a2f161b7f8cde2c15c4b73d05c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 24 Mar 2026 07:17:14 +0100 Subject: [PATCH] Update --- packages/effect-fc/src/Lens.ts | 84 +++++++++++++++++----------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/packages/effect-fc/src/Lens.ts b/packages/effect-fc/src/Lens.ts index 24ecfae..f0e46ad 100644 --- a/packages/effect-fc/src/Lens.ts +++ b/packages/effect-fc/src/Lens.ts @@ -4,7 +4,7 @@ import { Chunk, Effect, Function, Pipeable, Predicate, Readable, Stream, Subscri export const LensTypeId: unique symbol = Symbol.for("@effect-fc/Lens/Lens") export type LensTypeId = typeof LensTypeId -export interface Lens +export interface Lens extends Subscribable.Subscribable { readonly [LensTypeId]: LensTypeId @@ -13,8 +13,8 @@ extends Subscribable.Subscribable { ) => Effect.Effect } -export class LensImpl -extends Pipeable.Class() implements Lens { +export class LensImpl + extends Pipeable.Class() implements Lens { readonly [Readable.TypeId]: Readable.TypeId = Readable.TypeId readonly [Subscribable.TypeId]: Subscribable.TypeId = Subscribable.TypeId readonly [LensTypeId]: LensTypeId = LensTypeId @@ -34,7 +34,7 @@ extends Pipeable.Class() implements Lens { export const isLens = (u: unknown): u is Lens => Predicate.hasProperty(u, LensTypeId) -export const make = ( +export const make = ( options: { readonly get: Effect.Effect readonly changes: Stream.Stream @@ -46,7 +46,7 @@ export const make = ( } | { readonly set: (a: A) => Effect.Effect } ) -): Lens => new LensImpl( +): Lens => new LensImpl( options.get, options.changes, Predicate.hasProperty(options, "modify") @@ -71,11 +71,11 @@ export const fromSubscriptionRef = ( }) -export const map = ( - self: Lens, +export const map = ( + self: Lens, get: (a: NoInfer) => B, set: (a: NoInfer, b: B) => NoInfer, -): Lens => make({ +): Lens => make({ get get() { return Effect.map(self.get, get) }, get changes() { return Stream.map(self.changes, get) }, modify: ( @@ -85,11 +85,11 @@ export const map = ( ), }) -export const mapEffect = ( - self: Lens, +export const mapEffect = ( + self: Lens, get: (a: NoInfer) => Effect.Effect, set: (a: NoInfer, b: B) => Effect.Effect, ESet, RSet>, -): Lens => make({ +): Lens => make({ get get() { return Effect.flatMap(self.get, get) }, get changes() { return Stream.mapEffect(self.changes, get) }, modify: ( @@ -106,33 +106,33 @@ export const mapEffect = (self: Lens): Effect.Effect => self.get +export const get = (self: Lens): Effect.Effect => self.get export const set: { - (value: A): (self: Lens) => Effect.Effect - (self: Lens, value: A): Effect.Effect -} = Function.dual(2, (self: Lens, value: A) => + (value: A): (self: Lens) => Effect.Effect + (self: Lens, value: A): Effect.Effect +} = Function.dual(2, (self: Lens, value: A) => self.modify(() => Effect.succeed([void 0, value] as const)), ) export const getAndSet: { - (value: A): (self: Lens) => Effect.Effect - (self: Lens, value: A): Effect.Effect -} = Function.dual(2, (self: Lens, value: A) => + (value: A): (self: Lens) => Effect.Effect + (self: Lens, value: A): Effect.Effect +} = Function.dual(2, (self: Lens, value: A) => self.modify(a => Effect.succeed([a, value] as const)), ) export const update: { - (f: (a: A) => A): (self: Lens) => Effect.Effect - (self: Lens, f: (a: A) => A): Effect.Effect -} = Function.dual(2, (self: Lens, f: (a: A) => A) => + (f: (a: A) => A): (self: Lens) => Effect.Effect + (self: Lens, f: (a: A) => A): Effect.Effect +} = Function.dual(2, (self: Lens, f: (a: A) => A) => self.modify(a => Effect.succeed([void 0, f(a)] as const)), ) export const updateEffect: { - (f: (a: A) => Effect.Effect): (self: Lens) => Effect.Effect - (self: Lens, f: (a: A) => Effect.Effect): Effect.Effect -} = Function.dual(2, (self: Lens, f: (a: A) => Effect.Effect) => + (f: (a: A) => Effect.Effect): (self: Lens) => Effect.Effect + (self: Lens, f: (a: A) => Effect.Effect): Effect.Effect +} = Function.dual(2, (self: Lens, f: (a: A) => Effect.Effect) => self.modify(a => Effect.flatMap( f(a), next => Effect.succeed([void 0, next] as const), @@ -140,16 +140,16 @@ export const updateEffect: { ) export const getAndUpdate: { - (f: (a: A) => A): (self: Lens) => Effect.Effect - (self: Lens, f: (a: A) => A): Effect.Effect -} = Function.dual(2, (self: Lens, f: (a: A) => A) => + (f: (a: A) => A): (self: Lens) => Effect.Effect + (self: Lens, f: (a: A) => A): Effect.Effect +} = Function.dual(2, (self: Lens, f: (a: A) => A) => self.modify(a => Effect.succeed([a, f(a)] as const)), ) export const getAndUpdateEffect: { - (f: (a: A) => Effect.Effect): (self: Lens) => Effect.Effect - (self: Lens, f: (a: A) => Effect.Effect): Effect.Effect -} = Function.dual(2, (self: Lens, f: (a: A) => Effect.Effect) => + (f: (a: A) => Effect.Effect): (self: Lens) => Effect.Effect + (self: Lens, f: (a: A) => Effect.Effect): Effect.Effect +} = Function.dual(2, (self: Lens, f: (a: A) => Effect.Effect) => self.modify(a => Effect.flatMap( f(a), next => Effect.succeed([a, next] as const) @@ -157,16 +157,16 @@ export const getAndUpdateEffect: { ) export const setAndGet: { - (value: A): (self: Lens) => Effect.Effect - (self: Lens, value: A): Effect.Effect -} = Function.dual(2, (self: Lens, value: A) => + (value: A): (self: Lens) => Effect.Effect + (self: Lens, value: A): Effect.Effect +} = Function.dual(2, (self: Lens, value: A) => self.modify(() => Effect.succeed([value, value] as const)), ) export const updateAndGet: { - (f: (a: A) => A): (self: Lens) => Effect.Effect - (self: Lens, f: (a: A) => A): Effect.Effect -} = Function.dual(2, (self: Lens, f: (a: A) => A) => + (f: (a: A) => A): (self: Lens) => Effect.Effect + (self: Lens, f: (a: A) => A): Effect.Effect +} = Function.dual(2, (self: Lens, f: (a: A) => A) => self.modify(a => { const next = f(a) return Effect.succeed([next, next] as const) @@ -174,18 +174,18 @@ export const updateAndGet: { ) export const updateAndGetEffect: { - (f: (a: A) => Effect.Effect): (self: Lens) => Effect.Effect - (self: Lens, f: (a: A) => Effect.Effect): Effect.Effect -} = Function.dual(2, (self: Lens, f: (a: A) => Effect.Effect) => + (f: (a: A) => Effect.Effect): (self: Lens) => Effect.Effect + (self: Lens, f: (a: A) => Effect.Effect): Effect.Effect +} = Function.dual(2, (self: Lens, f: (a: A) => Effect.Effect) => self.modify(a => Effect.flatMap( f(a), next => Effect.succeed([next, next] as const), )), ) -export const unwrap = ( - effect: Effect.Effect, E1, R1> -): Lens => make({ +export const unwrap = ( + effect: Effect.Effect, E1, R1> +): Lens => make({ get: Effect.flatMap(effect, l => l.get), changes: Stream.unwrap(Effect.map(effect, l => l.changes)), modify: (