@typed/lenses
Version:
Strongly-typed functional lenses
13 lines • 573 B
TypeScript
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