import { Arity1, Arity2, Curry2 } from '@typed/lambda';
export interface Lens<A, B> {
    readonly get: Arity1<A, B>;
    readonly update: Curry2<Arity1<B, B>, A, A>;
}
export declare namespace Lens {
    const create: <A, B>(get: Arity1<A, B>, set: Arity2<B, A, A>) => Lens<A, B>;
    const id: <A>() => Lens<A, A>;
    const prop: <A, K extends keyof A>(key: K) => Lens<A, A[K]>;
}
export declare type LensInput<A> = A extends Lens<infer R, any> ? R : never;
export declare type LensOutput<A> = A extends Lens<any, infer R> ? R : never;
//# sourceMappingURL=Lens.d.ts.map