0.2.0 #5
@@ -183,6 +183,35 @@ export const derive: {
|
|||||||
): Lens<A, ER2, EW2, RR2, RW2> => new DerivedLensImpl(asLensImpl(self), source))
|
): 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>
|
export class RefLensImpl<in out A>
|
||||||
extends LensImpl<A, never, never, never, never> {
|
extends LensImpl<A, never, never, never, never> {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -308,21 +337,6 @@ export const fromSubscriptionRef = <A>(
|
|||||||
): Lens<A, never, never, never, never> => new SubscriptionRefLensImpl(ref as SubscriptionRefLensImpl.SubscriptionRefWithInternals<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.
|
* Derives a new `Lens` by applying synchronous getters and setters over the focused value.
|
||||||
*/
|
*/
|
||||||
@@ -606,7 +620,7 @@ export const catchAllWrite: {
|
|||||||
mapStream: identity,
|
mapStream: identity,
|
||||||
mapLock: lock => Effect.catchAll(
|
mapLock: lock => Effect.catchAll(
|
||||||
lock,
|
lock,
|
||||||
error => Effect.as(f(error), identityLock),
|
error => Effect.as(f(error), identity),
|
||||||
),
|
),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user