type ES5Collection = Array | { [key: string]: T }; export type Map = (a2b: (a: A) => B) => (fx: FA) => FB; export type Lens = (map_f: Map) => (x2Fy: (x: X) => FX) => (target: S) => FS; export type ComposableLens = (x2Fy: (x:X) => FX) => (target: S) => FS; export function lens(getter: (sa: S) => A, setter: (a: A, sa: S) => S): Lens; export function propertyLens(key: string): Lens, ES5Collection>; export function indexLens(index: number): Lens, ES5Collection>; export function makeComposableOverLens(lens: Lens): ComposableLens; export function makeComposableViewLens(lens: Lens): ComposableLens; export function makeComposableSequenceLens(lens: Lens, map_f: Map): ComposableLens; export function makeComposableSequenceLens(lens: Lens): (map_f: Map) => ComposableLens; export function over(cL: ComposableLens, x2x: (a:A) => A, target: S): S; export function over(cL: ComposableLens): (x2x: (a:A) => A, target: S) => S; export function over(cL: ComposableLens, x2x: (a:A) => A): (target: S) => S; export function over(cL: ComposableLens): (x2x: (a:A) => A) => (target: S) => S; export function set(cL: ComposableLens, a: A, target: S): S; export function view(cL: ComposableLens, target: S): A; export function view(cL: ComposableLens): (target: S) => A; export function sequence(lens: ComposableLens, target: S): A; export function sequence(lens: ComposableLens): (target: S) => A; export function composeFocus(lenses: Array>): ComposableLens; export function composeOptics(lenses: Array>): ComposableLens;