0.2.0 #5
@@ -183,6 +183,35 @@ export const derive: {
|
||||
): Lens<A, ER2, EW2, RR2, RW2> => new DerivedLensImpl(asLensImpl(self), source))
|
||||
|
||||
|
||||
export class UnwrappedLensImpl<in out A, in out ER, in out EW, in out RR, in out RW, in out E1, in out R1>
|
||||
extends LensImpl<A, ER | E1, EW | E1, RR | R1, RW | R1> {
|
||||
constructor(
|
||||
readonly effect: Effect.Effect<Lens<A, ER, EW, RR, RW>, E1, R1>
|
||||
) {
|
||||
super()
|
||||
}
|
||||
|
||||
get resolve(): Effect.Effect<LensImpl.Frame<A, EW | E1, RW | R1>, ER | E1, RR | R1> {
|
||||
return Effect.map(
|
||||
Effect.flatMap(this.effect, l => asLensImpl(l).resolve),
|
||||
frame => ({
|
||||
value: frame.value,
|
||||
commit: next => frame.commit(next),
|
||||
}),
|
||||
)
|
||||
}
|
||||
get changes() { return Stream.unwrap(Effect.map(this.effect, l => l.changes)) }
|
||||
get lock() { return Effect.flatMap(this.effect, l => asLensImpl(l).lock) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Flattens an effectful `Lens`.
|
||||
*/
|
||||
export const unwrap = <A, ER, EW, RR, RW, E1, R1>(
|
||||
effect: Effect.Effect<Lens<A, ER, EW, RR, RW>, E1, R1>
|
||||
): Lens<A, ER | E1, EW | E1, RR | R1, RW | R1> => new UnwrappedLensImpl(effect)
|
||||
|
||||
|
||||
export class RefLensImpl<in out A>
|
||||
extends LensImpl<A, never, never, never, never> {
|
||||
constructor(
|
||||
@@ -308,21 +337,6 @@ export const fromSubscriptionRef = <A>(
|
||||
): Lens<A, never, never, never, never> => new SubscriptionRefLensImpl(ref as SubscriptionRefLensImpl.SubscriptionRefWithInternals<A>)
|
||||
|
||||
|
||||
/**
|
||||
* Flattens an effectful `Lens`.
|
||||
*/
|
||||
export const unwrap = <A, ER, EW, RR, RW, E1, R1>(
|
||||
effect: Effect.Effect<Lens<A, ER, EW, RR, RW>, E1, R1>
|
||||
): Lens<A, ER | E1, ER | EW | E1, RR | R1, RR | RW | R1> => make({
|
||||
get: Effect.flatMap(effect, l => l.get),
|
||||
changes: Stream.unwrap(Effect.map(effect, l => l.changes)),
|
||||
commit: a => Effect.flatMap(
|
||||
effect,
|
||||
l => Effect.flatMap(asLensImpl(l).resolve, frame => frame.commit(Effect.succeed(a))),
|
||||
),
|
||||
lock: Effect.flatMap(effect, l => asLensImpl(l).lock),
|
||||
})
|
||||
|
||||
/**
|
||||
* Derives a new `Lens` by applying synchronous getters and setters over the focused value.
|
||||
*/
|
||||
@@ -606,7 +620,7 @@ export const catchAllWrite: {
|
||||
mapStream: identity,
|
||||
mapLock: lock => Effect.catchAll(
|
||||
lock,
|
||||
error => Effect.as(f(error), identityLock),
|
||||
error => Effect.as(f(error), identity),
|
||||
),
|
||||
}))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user