0.2.0 #5

Merged
Thilawyn merged 59 commits from next into master 2026-05-30 06:10:54 +02:00
Showing only changes of commit 74519010b3 - Show all commits
+12 -19
View File
@@ -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 },
}))
/**