@@ -35,16 +35,18 @@ extends Lens<A, ER, EW, RR, RW> {
|
||||
readonly [LensWithInternalsTypeId]: LensWithInternalsTypeId
|
||||
|
||||
readonly update: (a: A) => Effect.Effect<void, EW, RW>
|
||||
readonly withLock: <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>) => Effect.Effect<A1, E1, R1>
|
||||
readonly withLock: <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>) => Effect.Effect<A1, EW | E1, RW | R1>
|
||||
}
|
||||
|
||||
export const isLensWithInternals = (u: unknown): u is LensWithInternals<unknown, unknown, unknown, unknown, unknown> => Predicate.hasProperty(u, LensWithInternalsTypeId)
|
||||
|
||||
export const asLensWithInternals = <A, ER, EW, RR, RW>(
|
||||
lens: Lens<A, ER, EW, RR, RW>
|
||||
): Effect.Effect<LensWithInternals<A, ER, EW, RR, RW>, never, never> => isLensWithInternals(lens)
|
||||
? Effect.succeed(lens as LensWithInternals<A, ER, EW, RR, RW>)
|
||||
: Effect.die("Not a 'LensWithInternals'.")
|
||||
): LensWithInternals<A, ER, EW, RR, RW> => {
|
||||
if (!isLensWithInternals(lens))
|
||||
throw new Error("Not a 'LensWithInternals'.")
|
||||
return lens as LensWithInternals<A, ER, EW, RR, RW>
|
||||
}
|
||||
|
||||
|
||||
export declare namespace LensImpl {
|
||||
@@ -52,7 +54,7 @@ export declare namespace LensImpl {
|
||||
readonly get: Effect.Effect<A, ER, RR>,
|
||||
readonly changes: Stream.Stream<A, ER, RR>,
|
||||
readonly update: (a: A) => Effect.Effect<void, EW, RW>,
|
||||
readonly withLock: <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>) => Effect.Effect<A1, E1, R1>,
|
||||
readonly withLock: <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>) => Effect.Effect<A1, EW | E1, RW | R1>,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +68,7 @@ extends Pipeable.Class() implements LensWithInternals<A, ER, EW, RR, RW> {
|
||||
readonly get: Effect.Effect<A, ER, RR>
|
||||
readonly changes: Stream.Stream<A, ER, RR>
|
||||
readonly update: (a: A) => Effect.Effect<void, EW, RW>
|
||||
readonly withLock: <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>) => Effect.Effect<A1, E1, R1>
|
||||
readonly withLock: <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>) => Effect.Effect<A1, EW | E1, RW | R1>
|
||||
|
||||
constructor(
|
||||
source: LensImpl.Source<A, ER, EW, RR, RW>
|
||||
@@ -226,16 +228,10 @@ export const unwrap = <A, ER, EW, RR, RW, E1, R1>(
|
||||
): Lens<A, ER | E1, EW | E1, RR | R1, RW | R1> => make({
|
||||
get: Effect.flatMap(effect, l => l.get),
|
||||
changes: Stream.unwrap(Effect.map(effect, l => l.changes)),
|
||||
update: a => Effect.flatMap(
|
||||
effect,
|
||||
l => Effect.flatMap(asLensWithInternals(l), l => l.update(a))
|
||||
),
|
||||
update: a => Effect.flatMap(effect, l => asLensWithInternals(l).update(a)),
|
||||
withLock: <A2, E2, R2>(
|
||||
effect2: Effect.Effect<A2, E2, R2>
|
||||
): Effect.Effect<A2, E1 | E2, R1 | R2> => Effect.flatMap(
|
||||
effect,
|
||||
l => Effect.flatMap(asLensWithInternals(l), l2 => l2.withLock(effect2)),
|
||||
),
|
||||
) => Effect.flatMap(effect, l => asLensWithInternals(l).withLock(effect2)),
|
||||
})
|
||||
|
||||
/**
|
||||
@@ -258,11 +254,8 @@ export const map: {
|
||||
): Lens<B, ER, EW, RR, RW> => makeLazy({
|
||||
get get() { return Effect.map(self.get, get) },
|
||||
get changes() { return Stream.map(self.changes, get) },
|
||||
modify: <C, E1 = never, R1 = never>(
|
||||
f: (b: B) => Effect.Effect<readonly [C, B], E1, R1>
|
||||
) => self.modify(a =>
|
||||
Effect.flatMap(f(get(a)), ([c, next]) => Effect.succeed([c, set(a, next)]))
|
||||
),
|
||||
update(a: A) { return },
|
||||
get withLock() { return asLensWithInternals(self).withLock },
|
||||
}))
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user