diff --git a/packages/effect-fc/src/Lens.ts b/packages/effect-fc/src/Lens.ts
index 18d10b3..6c7da97 100644
--- a/packages/effect-fc/src/Lens.ts
+++ b/packages/effect-fc/src/Lens.ts
@@ -74,21 +74,21 @@ export const fromSubscriptionRef = (
export const map = (
self: Lens,
get: (a: A) => B,
- set: (b: B, parent: A) => A,
+ set: {
+ (parent: A, b: B): A
+ (b: B): (parent: A) => A
+ },
): Lens => {
- const getEffect = Effect.map(self.get, get)
- const changes = Stream.map(self.changes, get)
- const modify = (
- h: (b: B) => Effect.Effect
- ) => self.modify((a: A) => {
- const b = get(a)
- return Effect.flatMap(h(b), ([c, bNext]) => Effect.succeed([c, set(bNext, a)] as const))
- })
+ const setF =
return make({
- get: getEffect,
- changes,
- modify,
+ get: Effect.map(self.get, get),
+ changes: Stream.map(self.changes, get),
+ modify: (
+ f: (b: B) => Effect.Effect
+ ) => self.modify((a: A) =>
+ Effect.flatMap(f(get(a)), ([c, next]) => Effect.succeed([c, set(a, next)] as const))
+ ),
})
}
@@ -104,8 +104,8 @@ export const mapEffect = self.modify((a: A) => Effect.flatMap(getF(a), b => Effect.flatMap(h(b), ([c, bNext]) => Effect.flatMap(setF(bNext, a), nextA => Effect.succeed([c, nextA] as const)))))
return make({
- get,
- changes,
+ get: Effect.flatMap(self.get, getF),
+ changes: Stream.mapEffect(self.changes, getF),
modify,
})
}