diff --git a/packages/effect-fc/src/Form.ts b/packages/effect-fc/src/Form.ts
index 11b2a62..9aeefc7 100644
--- a/packages/effect-fc/src/Form.ts
+++ b/packages/effect-fc/src/Form.ts
@@ -199,19 +199,13 @@ export const field = Effect.andThen(
- ParseResult.ArrayFormatter.formatError(v),
- Array.filter(issue => PropertyPath.equivalence(issue.path, path)),
- ),
- onNone: () => Effect.succeed([]),
- }),
- filter => SubscribableInternal.make({
- get: Effect.flatMap(self.errorRef.get, filter),
- get changes() { return Stream.flatMap(self.errorRef.changes, filter) },
- }),
- ),
+ SubscribableInternal.flatMapSubscriptionRef(self.errorRef, Option.match({
+ onSome: flow(
+ ParseResult.ArrayFormatter.formatError,
+ Effect.map(Array.filter(issue => PropertyPath.equivalence(issue.path, path))),
+ ),
+ onNone: () => Effect.succeed([]),
+ })),
pipe(
Option.isSome,
diff --git a/packages/effect-fc/src/Subscribable.ts b/packages/effect-fc/src/Subscribable.ts
index 3325fdc..416c6ea 100644
--- a/packages/effect-fc/src/Subscribable.ts
+++ b/packages/effect-fc/src/Subscribable.ts
@@ -1,4 +1,4 @@
-import { type Effect, Effectable, Readable, type Stream, Subscribable } from "effect"
+import { Effect, Effectable, Readable, Stream, Subscribable, type SubscriptionRef } from "effect"
class SubscribableImpl
@@ -22,3 +22,11 @@ export const make = (values: {
readonly get: Effect.Effect
readonly changes: Stream.Stream
}): Subscribable.Subscribable => new SubscribableImpl(values.get, values.changes)
+
+export const flatMapSubscriptionRef = (
+ ref: SubscriptionRef.SubscriptionRef,
+ flatMap: (value: NoInfer) => Effect.Effect,
+): Subscribable.Subscribable => make({
+ get: Effect.flatMap(ref, flatMap),
+ get changes() { return Stream.flatMap(ref.changes, flatMap) },
+})