diff --git a/packages/effect-lens/src/Lens.ts b/packages/effect-lens/src/Lens.ts index 82eabc0..57b23d5 100644 --- a/packages/effect-lens/src/Lens.ts +++ b/packages/effect-lens/src/Lens.ts @@ -31,11 +31,22 @@ export const isLens = (u: unknown): u is Lens { +export interface LensStep< + in out A, + in out B, + in out ER = never, + in out EW = never, + in out RR = never, + in out RW = never, + in out SourceER = never, + in out SourceEW = never, + in out SourceRR = never, + in out SourceRW = never, +> { readonly [LensStepTypeId]: LensStepTypeId - readonly transform: (parent: B) => Effect.Effect - readonly transformStream: (parent: B) => Stream.Stream - readonly update: (next: A, parent: B) => Effect.Effect + readonly transform: (effect: Effect.Effect) => Effect.Effect + readonly transformStream: (stream: Stream.Stream) => Stream.Stream + readonly update: (next: Effect.Effect, parent: B) => Effect.Effect } export const isLensStep = (u: unknown): u is LensStep => Predicate.hasProperty(u, LensStepTypeId) @@ -71,7 +82,7 @@ extends Pipeable.Class() implements Lens { readonly [LensTypeId]: LensTypeId = LensTypeId readonly [LensImplTypeId]: LensImplTypeId = LensImplTypeId - readonly steps: readonly LensStep[] = [] + readonly steps: readonly LensStep[] = [] abstract readonly sourceGet: Effect.Effect abstract readonly sourceChanges: Stream.Stream