diff --git a/packages/effect-lens/src/Lens.ts b/packages/effect-lens/src/Lens.ts index 4d9063c..6ee763b 100644 --- a/packages/effect-lens/src/Lens.ts +++ b/packages/effect-lens/src/Lens.ts @@ -96,7 +96,7 @@ extends Pipeable.Class() implements Lens { ) for (const step of this.steps) - effect = step.access(effect as never) as Effect.Effect, unknown, unknown> + effect = step.access(effect) as Effect.Effect, unknown, unknown> return effect as Effect.Effect, ER, RR> } @@ -126,9 +126,24 @@ extends Pipeable.Class() implements Lens { } +export declare namespace LensLazyImpl { + export interface Source< + in out B, + in out EW = never, + in out ESW = never, + in out ESR = never, + in out RSR = never, + in out RW = never, + in out RSW = never, + > { + readonly sourceGet: Effect.Effect + readonly sourceChanges: Stream.Stream + readonly sourceCommit: (b: B) => Effect.Effect + readonly withLock: (self: Effect.Effect) => Effect.Effect + } +} - -export abstract class LensLazyImpl< +export class LensLazyImpl< in out A, in out B, in out ER = never, @@ -140,23 +155,31 @@ export abstract class LensLazyImpl< in out RW = never, in out RSW = never, > -extends Pipeable.Class() implements Lens { +extends LensImpl { + constructor( + readonly source: LensLazyImpl.Source + ) { + super() + } + get sourceGet() { return this.source.sourceGet } + get sourceChanges() { return this.source.sourceChanges } + sourceCommit(b: B) { return this.source.sourceCommit(b) } + get withLock() { return this.source.withLock } } - /** * Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations. */ -export const make = ( - source: LensImpl.Source -): Lens => new LensImpl(source) +// export const make = ( +// source: LensImpl.Source +// ): Lens => new LensImpl(source) /** * Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations. */ export const makeLazy = ( - source: LensImpl.Source + source: LensLazyImpl.Source ): Lens => new LensLazyImpl(source)