diff --git a/packages/effect-lens-next/src/Lens.ts b/packages/effect-lens-next/src/Lens.ts
index aa71810..710c496 100644
--- a/packages/effect-lens-next/src/Lens.ts
+++ b/packages/effect-lens-next/src/Lens.ts
@@ -219,11 +219,13 @@ extends LensImpl {
* Note: since `Ref` does not provide any kind of reactivity mechanism, the produced `Lens` will be non-reactive.
* This means its `changes` stream will only emit the current value once when evaluated and nothing else.
*/
-export const fromRef = Effect.fnUntraced(function* (
+export const fromRef = (
ref: Ref.Ref
-): Effect.fn.Return, never, never> {
- return new RefLensImpl(ref, yield* Semaphore.make(1))
-})
+): Effect.Effect, never, never> => Effect.map(
+ Semaphore.make(1),
+ semaphore => new RefLensImpl(ref, semaphore),
+)
+
export class SynchronizedRefLensImpl
extends LensImpl {
diff --git a/packages/effect-lens/src/Lens.ts b/packages/effect-lens/src/Lens.ts
index 55515a7..0f76c0b 100644
--- a/packages/effect-lens/src/Lens.ts
+++ b/packages/effect-lens/src/Lens.ts
@@ -182,11 +182,12 @@ extends LensImpl {
* Note: since `Ref` does not provide any kind of reactivity mechanism, the produced `Lens` will be non-reactive.
* This means its `changes` stream will only emit the current value once when evaluated and nothing else.
*/
-export const fromRef = Effect.fnUntraced(function* (
+export const fromRef = (
ref: Ref.Ref
-): Effect.fn.Return, never, never> {
- return new RefLensImpl(ref, yield* Effect.makeSemaphore(1))
-})
+): Effect.Effect, never, never> => Effect.map(
+ Effect.makeSemaphore(1),
+ semaphore => new RefLensImpl(ref, semaphore),
+)
export declare namespace SynchronizedRefLensImpl {