From a373aee08ba7e2b221fec12fbb6016193379def7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 31 Mar 2026 15:16:49 +0200 Subject: [PATCH] Fix Result --- packages/effect-fc/src/Result.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/effect-fc/src/Result.ts b/packages/effect-fc/src/Result.ts index 1f6057b..9894a5a 100644 --- a/packages/effect-fc/src/Result.ts +++ b/packages/effect-fc/src/Result.ts @@ -1,4 +1,4 @@ -import { Cause, Context, Data, Effect, Equal, Exit, type Fiber, Hash, Layer, Match, pipe, Pipeable, Predicate, PubSub, type Scope, Stream, type Subscribable, SynchronizedRef } from "effect" +import { Cause, Context, Data, Effect, Equal, Exit, type Fiber, Hash, Layer, Match, pipe, Pipeable, Predicate, PubSub, Ref, type Scope, Stream, type Subscribable, SynchronizedRef } from "effect" import { Lens } from "effect-lens" @@ -214,15 +214,24 @@ export const unsafeForkEffect = Effect.fnUntraced(function* > { const ref = yield* SynchronizedRef.make>(options?.initial ?? initial()) const pubsub = yield* PubSub.unbounded>() + const state = Lens.make, never, never, never, never>({ - get get() { return ref.get }, + get get() { return Ref.get(ref) }, get changes() { return Stream.unwrapScoped(Effect.map( - Effect.all([ref.get, Stream.fromPubSub(pubsub, { scoped: true })]), + Effect.all([Ref.get(ref), Stream.fromPubSub(pubsub, { scoped: true })]), ([latest, stream]) => Stream.concat(Stream.make(latest), stream), )) }, - modify: f => ref.modifyEffect(f), + modify: ( + f: (a: Result) => Effect.Effect], E1, R1> + ): Effect.Effect => Ref.get(ref).pipe( + Effect.flatMap(f), + Effect.flatMap(([b, a]) => Ref.set(ref, a).pipe( + Effect.as(b), + Effect.zipLeft(PubSub.publish(pubsub, a)) + )), + ), }) const fiber = yield* Effect.gen(function*() {