From 285fc8427513f4e27e46557b510d4e625c0a0a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 23 Mar 2026 04:25:13 +0100 Subject: [PATCH] Fix Lens --- packages/effect-fc/src/Lens.ts | 10 +++++--- packages/effect-fc/src/Writable.ts | 40 ------------------------------ packages/effect-fc/src/index.ts | 1 - 3 files changed, 6 insertions(+), 45 deletions(-) delete mode 100644 packages/effect-fc/src/Writable.ts diff --git a/packages/effect-fc/src/Lens.ts b/packages/effect-fc/src/Lens.ts index 1d00bfa..de82814 100644 --- a/packages/effect-fc/src/Lens.ts +++ b/packages/effect-fc/src/Lens.ts @@ -1,12 +1,15 @@ import { Effect, Pipeable, Predicate, Readable, Stream, Subscribable, type SubscriptionRef } from "effect" -import * as Writable from "./Writable.js" export const LensTypeId: unique symbol = Symbol.for("@effect-fc/Lens/Lens") export type LensTypeId = typeof LensTypeId export interface Lens -extends LensPrototype, Subscribable.Subscribable, Writable.Writable {} +extends Subscribable.Subscribable, LensPrototype { + readonly modify: ( + f: (a: A) => Effect.Effect + ) => Effect.Effect +} export interface LensPrototype extends Pipeable.Pipeable { @@ -15,7 +18,6 @@ export interface LensPrototype extends Pipeable.Pipeable { export const LensPrototype: LensPrototype = Object.freeze({ ...Pipeable.Prototype, - ...Writable.WritablePrototype, [Readable.TypeId]: Readable.TypeId, [Subscribable.TypeId]: Subscribable.TypeId, [LensTypeId]: LensTypeId, @@ -29,8 +31,8 @@ export const make = ( readonly get: Effect.Effect readonly changes: Stream.Stream } & ( - | { readonly modify: (f: (a: A) => Effect.Effect) => Effect.Effect } | { readonly set: (value: A) => Effect.Effect } + | { readonly modify: (f: (a: A) => Effect.Effect) => Effect.Effect } ) ): Lens => Object.setPrototypeOf({ get: options.get, diff --git a/packages/effect-fc/src/Writable.ts b/packages/effect-fc/src/Writable.ts deleted file mode 100644 index 9883fd0..0000000 --- a/packages/effect-fc/src/Writable.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Effect, Pipeable, Predicate } from "effect" - - -export const WritableTypeId: unique symbol = Symbol.for("@effect-fc/Writable/Writable") -export type WritableTypeId = typeof WritableTypeId - -export interface Writable extends WritablePrototype { - readonly modify: (f: (a: A) => Effect.Effect) => Effect.Effect -} - - -export interface WritablePrototype extends Pipeable.Pipeable { - readonly [WritableTypeId]: WritableTypeId -} - -export const WritablePrototype: WritablePrototype = Object.freeze({ - [WritableTypeId]: WritableTypeId, - ...Pipeable.Prototype, -} as const) - - -export const isWritable = (u: unknown): u is Writable => Predicate.hasProperty(u, WritableTypeId) - -/** - * Construct a `Writable` from a `modify` function. - */ -export const make = ( - modify: (f: (a: A) => Effect.Effect) => Effect.Effect, -): Writable => Object.setPrototypeOf({ modify }, WritablePrototype) - -/** - * Unwrap a `Writable` that is wrapped in an `Effect`. - */ -export const unwrap = ( - effect: Effect.Effect, E1, R1> -): Writable => make( - ( - f: (a: A) => Effect.Effect - ) => Effect.flatMap(effect, w => w.modify(f)) -) diff --git a/packages/effect-fc/src/index.ts b/packages/effect-fc/src/index.ts index 9d0c561..8dbe743 100644 --- a/packages/effect-fc/src/index.ts +++ b/packages/effect-fc/src/index.ts @@ -16,4 +16,3 @@ export * as Stream from "./Stream.js" export * as Subscribable from "./Subscribable.js" export * as SubscriptionRef from "./SubscriptionRef.js" export * as SubscriptionSubRef from "./SubscriptionSubRef.js" -export * as Writable from "./Writable.js"