shades
Version:
Lens-like functionality with a lodash-style interface.
658 lines (346 loc) • 4.47 MB
TypeScript
// TypeScript Version: 3.4
import {
Functor,
Unpack,
HasKey,
KeyAt,
Collection,
Container,
Fill,
FillingPattern,
Indexable,
Index,
InputType,
HasPattern,
Fn0,
Fn1,
Fn2,
Fn3,
Fn4,
Fn5,
Fn6,
Fn7,
Fn8,
Traversal,
Lens
} from './utils';
export { Lens, Traversal } from './utils';
export function into<Fn extends (...a: any[]) => any>(f: Fn): Fn;
export function into<Key extends string>(f: Key): <Obj extends HasKey<Key>>(s: Obj) => Obj[Key];
export function into<Pattern extends object>(p: Pattern): (o: HasPattern<Pattern>) => boolean;
export function maxOf<Key extends string>(k: Key): <Item extends HasKey<Key, number>>(acc: Item, current: Item) => Item
export function maxOf<A>(f: (a: A) => number): (acc: A, current: A) => A
export function minOf<Key extends string>(k: Key): <Item extends HasKey<Key, number>>(acc: Item, current: Item) => Item
export function minOf<Item>(f: (a: Item) => number): (acc: Item, current: Item) => Item
export function findOf<Key extends string>(k: Key): <Item extends HasKey<Key>>(acc: Item, item: Item) => Item
export function findOf<Item>(f: (a: Item) => any): (acc: Item, current: Item) => Item
export function findOf<Pattern>(p: Pattern): <Item extends HasPattern<Pattern>>(acc: Item, item: Item) => Item
export function sumOf<Key extends string>(k: Key): (acc: number, current: HasKey<Key, number>) => number
export function sumOf<A>(f: (a: A) => number): (acc: number, current: A) => number
export function productOf<Key extends string>(k: Key): (acc: number, current: HasKey<Key, number>) => number
export function productOf<A>(f: (a: A) => number): (acc: number, current: A) => number
export function identity<A>(a: A): A
export function flip<A, B, Out>(f: (a: A) => (b: B) => Out): (b: B) => (a: A) => Out
export function always<A>(a: A): (b: any) => A
export function not<Key extends string>(k: Key): (obj: HasKey<Key>) => boolean
export function not<A>(a: Fn1<A, any>): Fn1<A, boolean>;
export function not<A, B>(a: Fn2<A, B, any>): Fn2<A, B, boolean>;
export function not<A, B, C>(a: Fn3<A, B, C, any>): Fn3<A, B, C, boolean>;
export function not<A, B, C, D>(a: Fn4<A, B, C, D, any>): Fn4<A, B, C, D, boolean>;
export function not<A, B, C, D, E>(a: Fn5<A, B, C, D, E, any>): Fn5<A, B, C, D, E, boolean>;
export function not<Pattern>(p: Pattern): (obj: HasPattern<Pattern>) => boolean
export function and<A, Out>(a?: Fn1<A, Out>, b?: Fn1<A, Out>, c?: Fn1<A, Out>, d?: Fn1<A, Out>, e?: Fn1<A, Out>, f?: Fn1<A, Out>): Fn1<A, Out>
export function and<A, B, Out>(a?: Fn2<A, B, Out>, b?: Fn2<A, B, Out>, c?: Fn2<A, B, Out>, d?: Fn2<A, B, Out>, e?: Fn2<A, B, Out>, f?: Fn2<A, B, Out>): Fn2<A, B, Out>
export function and<A, B, C, Out>(a?: Fn3<A, B, C, Out>, b?: Fn3<A, B, C, Out>, c?: Fn3<A, B, C, Out>, d?: Fn3<A, B, C, Out>, e?: Fn3<A, B, C, Out>, f?: Fn3<A, B, C, Out>): Fn3<A, B, C, Out>
export function and<A, B, C, D, Out>(a?: Fn4<A, B, C, D, Out>, b?: Fn4<A, B, C, D, Out>, c?: Fn4<A, B, C, D, Out>, d?: Fn4<A, B, C, D, Out>, e?: Fn4<A, B, C, D, Out>, f?: Fn4<A, B, C, D, Out>): Fn4<A, B, C, D, Out>
export function and<A, B, C, D, E, Out>(a?: Fn5<A, B, C, D, E, Out>, b?: Fn5<A, B, C, D, E, Out>, c?: Fn5<A, B, C, D, E, Out>, d?: Fn5<A, B, C, D, E, Out>, e?: Fn5<A, B, C, D, E, Out>, f?: Fn5<A, B, C, D, E, Out>): Fn5<A, B, C, D, E, Out>
export function or<A, Out>(a?: Fn1<A, Out>, b?: Fn1<A, Out>, c?: Fn1<A, Out>, d?: Fn1<A, Out>, e?: Fn1<A, Out>, f?: Fn1<A, Out>): Fn1<A, Out>
export function or<A, B, Out>(a?: Fn2<A, B, Out>, b?: Fn2<A, B, Out>, c?: Fn2<A, B, Out>, d?: Fn2<A, B, Out>, e?: Fn2<A, B, Out>, f?: Fn2<A, B, Out>): Fn2<A, B, Out>
export function or<A, B, C, Out>(a?: Fn3<A, B, C, Out>, b?: Fn3<A, B, C, Out>, c?: Fn3<A, B, C, Out>, d?: Fn3<A, B, C, Out>, e?: Fn3<A, B, C, Out>, f?: Fn3<A, B, C, Out>): Fn3<A, B, C, Out>
export function or<A, B, C, D, Out>(a?: Fn4<A, B, C, D, Out>, b?: Fn4<A, B, C, D, Out>, c?: Fn4<A, B, C, D, Out>, d?: Fn4<A, B, C, D, Out>, e?: Fn4<A, B, C, D, Out>, f?: Fn4<A, B, C, D, Out>): Fn4<A, B, C, D, Out>
export function or<A, B, C, D, E, Out>(a?: Fn5<A, B, C, D, E, Out>, b?: Fn5<A, B, C, D, E, Out>, c?: Fn5<A, B, C, D, E, Out>, d?: Fn5<A, B, C, D, E, Out>, e?: Fn5<A, B, C, D, E, Out>, f?: Fn5<A, B, C, D, E, Out>): Fn5<A, B, C, D, E, Out>
export function filter<K extends string>(k: K): <F extends Collection<HasKey<K>>>(f: F) => F;
export function filter<A>(f: (a: A) => any): <F>(f: F) => F;
export function filter<Pattern>(p: Pattern): <F extends Collection<HasPattern<Pattern>>>(f: F) => F;
export function map<K extends string>(k: K): <F extends Container<HasKey<K>>>(f: F) => Functor<F, Unpack<F>, KeyAt<Unpack<F>, K>>;
export function map(i: number): <F extends Container<Indexable>>(f: F) => Functor<F, Unpack<F>, Index<Unpack<F>>>;
export function map<A, B>(f: (a: A) => B): <F extends Container<A>>(f: F) => Functor<F, A, B>;
export function map<Pattern>(p: Pattern): <A extends HasPattern<Pattern>, F extends Container<A>>(f: F) => Functor<F, A, boolean>;
export function find<Key extends string>(f: Key): <A extends HasKey<Key>>(f: Collection<A>) => (A | undefined);
export function find<A>(f: (a: A) => any): (f: Collection<A>) => (A | undefined);
export function find<Pattern>(p: Pattern): <A extends HasPattern<Pattern>>(f: Collection<A>) => (A | undefined);
export function some<Key extends string>(f: Key): (f: Collection<HasKey<Key>>) => boolean;
export function some<A>(f: (a: A) => any): (f: Collection<A>) => boolean;
export function some<Pattern>(p: Pattern): (f: Collection<HasPattern<Pattern>>) => boolean;
export function cons<A>(a: A): (as: A[]) => A[]
export function unshift<A>(a: A): (as: A[]) => A[]
export function first(s: string): string
export function first<A>(xs: A[]): A
export function rest<A>(xs: A[]): A[]
export function push<A>(a: A): (as: A[]) => A[]
export function concat<A>(as: A[]): (bs: A[]) => A[]
export function append<A>(as: A[]): (bs: A[]) => A[]
export function prepend<A>(as: A[]): (bs: A[]) => A[]
export function fill<P extends object>(pat: P): <T extends FillingPattern<P>>(value: T) => Fill<T, P>
export function has<Pattern>(p: Pattern): (obj: HasPattern<Pattern>) => boolean
export function greaterThan(a: number): (b: number) => boolean
export function greaterThan(a: string): (b: string) => boolean
export function lessThan(a: number): (b: number) => boolean
export function lessThan(a: string): (b: string) => boolean
export function toggle(b: boolean): boolean
export function returns<A>(a: A): (f: () => A) => boolean
export function add(a: number): (b: number) => number
export function sub(a: number): (b: number) => number
export function inc(a: number): number
export function dec(a: number): number
export function includes(snippet: string): (text: string) => boolean
export function includesi(snippet: string): (text: string) => boolean
export function all<A>(): Traversal<A>; // tslint:disable-line
export function matching<Key extends string>(k: Key): Traversal<HasKey<Key>>
export function matching<A>(f: (a: A) => any): Traversal<A>
export function matching<Pattern>(p: Pattern): Traversal<HasPattern<Pattern>>
export interface FindBy {
<Key extends string>(k: Key): Lens<Collection<HasKey<Key>>, HasKey<Key>>
<A>(f: (a: A) => any): Lens<Collection<A>, A>
<Pattern>(p: Pattern): Lens<Collection<HasPattern<Pattern>>, HasPattern<Pattern>>
of: <A>(pattern: any) => Lens<Collection<A>, A>
}
export const findBy: FindBy
export interface MinBy {
<Key extends string>(k: Key): Lens<Collection<HasKey<Key>>, HasKey<Key>>
<A>(f: (a: A) => any): Lens<Collection<A>, A>
of: <A>(pattern: any) => Lens<Collection<A>, A>
}
export const maxBy: MinBy
export interface MaxBy {
<Key extends string>(k: Key): Lens<Collection<HasKey<Key>>, HasKey<Key>>
<A>(f: (a: A) => any): Lens<Collection<A>, A>
of: <A>(pattern: any) => Lens<Collection<A>, A>
}
export const minBy: MaxBy
export function updateAll<S>(...fns: Array<(state: S) => S>): (state: S) => S
export function valueOr<T>(dflt: T): Lens<T | undefined | null, T>
export function get<K1 extends string>(k1: K1): <S extends HasKey<K1>>(s: S) => KeyAt<S, K1>
export function get(i1: number): <S extends Indexable>(s: S) => Index<S>
export function get<T1>(t1: Traversal<T1>): <S extends Collection<T1>>(s: S) => S
export function get<S1, A1>(l1: Lens<S1, A1>): (s: S1) => A1
export function get<K1 extends string, K2 extends string>(k1: K1, k2: K2): <S extends HasKey<K1, HasKey<K2>>>(s: S) => KeyAt<KeyAt<S, K1>, K2>
export function get<K1 extends string>(k1: K1, i2: number): <S extends HasKey<K1, Indexable>>(s: S) => Index<KeyAt<S, K1>>
export function get<K1 extends string, T2>(k1: K1, t2: Traversal<T2>): <S extends HasKey<K1, Collection<T2>>>(s: S) => KeyAt<S, K1>
export function get<K1 extends string, S2, A2>(k1: K1, l2: Lens<S2, A2>): (s: HasKey<K1, S2>) => A2
export function get<K2 extends string>(i1: number, k2: K2): <S extends Indexable<HasKey<K2>>>(s: S) => KeyAt<Index<S>, K2>
export function get(i1: number, i2: number): <S extends Indexable<Indexable>>(s: S) => Index<Index<S>>
export function get<T2>(i1: number, t2: Traversal<T2>): <S extends Indexable<Collection<T2>>>(s: S) => Index<S>
export function get<S2, A2>(i1: number, l2: Lens<S2, A2>): (s: Indexable<S2>) => A2
export function get<T1, K2 extends string>(t1: Traversal<T1>, k2: K2): <S extends Collection<T1 & HasKey<K2>>>(s: S) => Functor<S, Unpack<S>, KeyAt<Unpack<S>, K2>>
export function get<T1>(t1: Traversal<T1>, i2: number): <S extends Collection<T1 & Indexable>>(s: S) => Functor<S, Unpack<S>, Index<Unpack<S>>>
export function get<T1, T2>(t1: Traversal<T1>, t2: Traversal<T2>): <S extends Collection<T1 & Collection<T2>>>(s: S) => S
export function get<T1, S2, A2>(t1: Traversal<T1>, l2: Lens<S2, A2>): <S extends Collection<T1 & S2>>(s: S) => Functor<S, Unpack<S>, A2>
export function get<S1, A1 extends HasKey<K2>, K2 extends string>(l1: Lens<S1, A1>, k2: K2): (s: S1) => KeyAt<A1, K2>
export function get<S1, A1 extends Indexable>(l1: Lens<S1, A1>, i2: number): (s: S1) => Index<A1>
export function get<S1, A1 extends Collection<T2>, T2>(l1: Lens<S1, A1>, t2: Traversal<T2>): (s: S1) => A1
export function get<S1, A1, A2>(l1: Lens<S1, A1>, l2: Lens<A1, A2>): (s: S1) => A2
export function get<K1 extends string, K2 extends string, K3 extends string>(k1: K1, k2: K2, k3: K3): <S extends HasKey<K1, HasKey<K2, HasKey<K3>>>>(s: S) => KeyAt<KeyAt<KeyAt<S, K1>, K2>, K3>
export function get<K1 extends string, K2 extends string>(k1: K1, k2: K2, i3: number): <S extends HasKey<K1, HasKey<K2, Indexable>>>(s: S) => Index<KeyAt<KeyAt<S, K1>, K2>>
export function get<K1 extends string, K2 extends string, T3>(k1: K1, k2: K2, t3: Traversal<T3>): <S extends HasKey<K1, HasKey<K2, Collection<T3>>>>(s: S) => KeyAt<KeyAt<S, K1>, K2>
export function get<K1 extends string, K2 extends string, S3, A3>(k1: K1, k2: K2, l3: Lens<S3, A3>): (s: HasKey<K1, HasKey<K2, S3>>) => A3
export function get<K1 extends string, K3 extends string>(k1: K1, i2: number, k3: K3): <S extends HasKey<K1, Indexable<HasKey<K3>>>>(s: S) => KeyAt<Index<KeyAt<S, K1>>, K3>
export function get<K1 extends string>(k1: K1, i2: number, i3: number): <S extends HasKey<K1, Indexable<Indexable>>>(s: S) => Index<Index<KeyAt<S, K1>>>
export function get<K1 extends string, T3>(k1: K1, i2: number, t3: Traversal<T3>): <S extends HasKey<K1, Indexable<Collection<T3>>>>(s: S) => Index<KeyAt<S, K1>>
export function get<K1 extends string, S3, A3>(k1: K1, i2: number, l3: Lens<S3, A3>): (s: HasKey<K1, Indexable<S3>>) => A3
export function get<K1 extends string, T2, K3 extends string>(k1: K1, t2: Traversal<T2>, k3: K3): <S extends HasKey<K1, Collection<T2 & HasKey<K3>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, KeyAt<Unpack<KeyAt<S, K1>>, K3>>
export function get<K1 extends string, T2>(k1: K1, t2: Traversal<T2>, i3: number): <S extends HasKey<K1, Collection<T2 & Indexable>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Index<Unpack<KeyAt<S, K1>>>>
export function get<K1 extends string, T2, T3>(k1: K1, t2: Traversal<T2>, t3: Traversal<T3>): <S extends HasKey<K1, Collection<T2 & Collection<T3>>>>(s: S) => KeyAt<S, K1>
export function get<K1 extends string, T2, S3, A3>(k1: K1, t2: Traversal<T2>, l3: Lens<S3, A3>): <S extends HasKey<K1, Collection<T2 & S3>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, A3>
export function get<K1 extends string, S2, A2 extends HasKey<K3>, K3 extends string>(k1: K1, l2: Lens<S2, A2>, k3: K3): (s: HasKey<K1, S2>) => KeyAt<A2, K3>
export function get<K1 extends string, S2, A2 extends Indexable>(k1: K1, l2: Lens<S2, A2>, i3: number): (s: HasKey<K1, S2>) => Index<A2>
export function get<K1 extends string, S2, A2 extends Collection<T3>, T3>(k1: K1, l2: Lens<S2, A2>, t3: Traversal<T3>): (s: HasKey<K1, S2>) => A2
export function get<K1 extends string, S2, A2, A3>(k1: K1, l2: Lens<S2, A2>, l3: Lens<A2, A3>): (s: HasKey<K1, S2>) => A3
export function get<K2 extends string, K3 extends string>(i1: number, k2: K2, k3: K3): <S extends Indexable<HasKey<K2, HasKey<K3>>>>(s: S) => KeyAt<KeyAt<Index<S>, K2>, K3>
export function get<K2 extends string>(i1: number, k2: K2, i3: number): <S extends Indexable<HasKey<K2, Indexable>>>(s: S) => Index<KeyAt<Index<S>, K2>>
export function get<K2 extends string, T3>(i1: number, k2: K2, t3: Traversal<T3>): <S extends Indexable<HasKey<K2, Collection<T3>>>>(s: S) => KeyAt<Index<S>, K2>
export function get<K2 extends string, S3, A3>(i1: number, k2: K2, l3: Lens<S3, A3>): (s: Indexable<HasKey<K2, S3>>) => A3
export function get<K3 extends string>(i1: number, i2: number, k3: K3): <S extends Indexable<Indexable<HasKey<K3>>>>(s: S) => KeyAt<Index<Index<S>>, K3>
export function get(i1: number, i2: number, i3: number): <S extends Indexable<Indexable<Indexable>>>(s: S) => Index<Index<Index<S>>>
export function get<T3>(i1: number, i2: number, t3: Traversal<T3>): <S extends Indexable<Indexable<Collection<T3>>>>(s: S) => Index<Index<S>>
export function get<S3, A3>(i1: number, i2: number, l3: Lens<S3, A3>): (s: Indexable<Indexable<S3>>) => A3
export function get<T2, K3 extends string>(i1: number, t2: Traversal<T2>, k3: K3): <S extends Indexable<Collection<T2 & HasKey<K3>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, KeyAt<Unpack<Index<S>>, K3>>
export function get<T2>(i1: number, t2: Traversal<T2>, i3: number): <S extends Indexable<Collection<T2 & Indexable>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Index<Unpack<Index<S>>>>
export function get<T2, T3>(i1: number, t2: Traversal<T2>, t3: Traversal<T3>): <S extends Indexable<Collection<T2 & Collection<T3>>>>(s: S) => Index<S>
export function get<T2, S3, A3>(i1: number, t2: Traversal<T2>, l3: Lens<S3, A3>): <S extends Indexable<Collection<T2 & S3>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, A3>
export function get<S2, A2 extends HasKey<K3>, K3 extends string>(i1: number, l2: Lens<S2, A2>, k3: K3): (s: Indexable<S2>) => KeyAt<A2, K3>
export function get<S2, A2 extends Indexable>(i1: number, l2: Lens<S2, A2>, i3: number): (s: Indexable<S2>) => Index<A2>
export function get<S2, A2 extends Collection<T3>, T3>(i1: number, l2: Lens<S2, A2>, t3: Traversal<T3>): (s: Indexable<S2>) => A2
export function get<S2, A2, A3>(i1: number, l2: Lens<S2, A2>, l3: Lens<A2, A3>): (s: Indexable<S2>) => A3
export function get<T1, K2 extends string, K3 extends string>(t1: Traversal<T1>, k2: K2, k3: K3): <S extends Collection<T1 & HasKey<K2, HasKey<K3>>>>(s: S) => Functor<S, Unpack<S>, KeyAt<KeyAt<Unpack<S>, K2>, K3>>
export function get<T1, K2 extends string>(t1: Traversal<T1>, k2: K2, i3: number): <S extends Collection<T1 & HasKey<K2, Indexable>>>(s: S) => Functor<S, Unpack<S>, Index<KeyAt<Unpack<S>, K2>>>
export function get<T1, K2 extends string, T3>(t1: Traversal<T1>, k2: K2, t3: Traversal<T3>): <S extends Collection<T1 & HasKey<K2, Collection<T3>>>>(s: S) => Functor<S, Unpack<S>, KeyAt<Unpack<S>, K2>>
export function get<T1, K2 extends string, S3, A3>(t1: Traversal<T1>, k2: K2, l3: Lens<S3, A3>): <S extends Collection<T1 & HasKey<K2, S3>>>(s: S) => Functor<S, Unpack<S>, A3>
export function get<T1, K3 extends string>(t1: Traversal<T1>, i2: number, k3: K3): <S extends Collection<T1 & Indexable<HasKey<K3>>>>(s: S) => Functor<S, Unpack<S>, KeyAt<Index<Unpack<S>>, K3>>
export function get<T1>(t1: Traversal<T1>, i2: number, i3: number): <S extends Collection<T1 & Indexable<Indexable>>>(s: S) => Functor<S, Unpack<S>, Index<Index<Unpack<S>>>>
export function get<T1, T3>(t1: Traversal<T1>, i2: number, t3: Traversal<T3>): <S extends Collection<T1 & Indexable<Collection<T3>>>>(s: S) => Functor<S, Unpack<S>, Index<Unpack<S>>>
export function get<T1, S3, A3>(t1: Traversal<T1>, i2: number, l3: Lens<S3, A3>): <S extends Collection<T1 & Indexable<S3>>>(s: S) => Functor<S, Unpack<S>, A3>
export function get<T1, T2, K3 extends string>(t1: Traversal<T1>, t2: Traversal<T2>, k3: K3): <S extends Collection<T1 & Collection<T2 & HasKey<K3>>>>(s: S) => Functor<S, Unpack<S>, Functor<Unpack<S>, Unpack<Unpack<S>>, KeyAt<Unpack<Unpack<S>>, K3>>>
export function get<T1, T2>(t1: Traversal<T1>, t2: Traversal<T2>, i3: number): <S extends Collection<T1 & Collection<T2 & Indexable>>>(s: S) => Functor<S, Unpack<S>, Functor<Unpack<S>, Unpack<Unpack<S>>, Index<Unpack<Unpack<S>>>>>
export function get<T1, T2, T3>(t1: Traversal<T1>, t2: Traversal<T2>, t3: Traversal<T3>): <S extends Collection<T1 & Collection<T2 & Collection<T3>>>>(s: S) => S
export function get<T1, T2, S3, A3>(t1: Traversal<T1>, t2: Traversal<T2>, l3: Lens<S3, A3>): <S extends Collection<T1 & Collection<T2 & S3>>>(s: S) => Functor<S, Unpack<S>, Functor<Unpack<S>, Unpack<Unpack<S>>, A3>>
export function get<T1, S2, A2 extends HasKey<K3>, K3 extends string>(t1: Traversal<T1>, l2: Lens<S2, A2>, k3: K3): <S extends Collection<T1 & S2>>(s: S) => Functor<S, Unpack<S>, KeyAt<A2, K3>>
export function get<T1, S2, A2 extends Indexable>(t1: Traversal<T1>, l2: Lens<S2, A2>, i3: number): <S extends Collection<T1 & S2>>(s: S) => Functor<S, Unpack<S>, Index<A2>>
export function get<T1, S2, A2 extends Collection<T3>, T3>(t1: Traversal<T1>, l2: Lens<S2, A2>, t3: Traversal<T3>): <S extends Collection<T1 & S2>>(s: S) => Functor<S, Unpack<S>, A2>
export function get<T1, S2, A2, A3>(t1: Traversal<T1>, l2: Lens<S2, A2>, l3: Lens<A2, A3>): <S extends Collection<T1 & S2>>(s: S) => Functor<S, Unpack<S>, A3>
export function get<S1, A1 extends HasKey<K2, HasKey<K3>>, K2 extends string, K3 extends string>(l1: Lens<S1, A1>, k2: K2, k3: K3): (s: S1) => KeyAt<KeyAt<A1, K2>, K3>
export function get<S1, A1 extends HasKey<K2, Indexable>, K2 extends string>(l1: Lens<S1, A1>, k2: K2, i3: number): (s: S1) => Index<KeyAt<A1, K2>>
export function get<S1, A1 extends HasKey<K2, Collection<T3>>, K2 extends string, T3>(l1: Lens<S1, A1>, k2: K2, t3: Traversal<T3>): (s: S1) => KeyAt<A1, K2>
export function get<S1, A1 extends HasKey<K2>, K2 extends string, A3>(l1: Lens<S1, A1>, k2: K2, l3: Lens<KeyAt<A1, K2>, A3>): (s: S1) => A3
export function get<S1, A1 extends Indexable<HasKey<K3>>, K3 extends string>(l1: Lens<S1, A1>, i2: number, k3: K3): (s: S1) => KeyAt<Index<A1>, K3>
export function get<S1, A1 extends Indexable<Indexable>>(l1: Lens<S1, A1>, i2: number, i3: number): (s: S1) => Index<Index<A1>>
export function get<S1, A1 extends Indexable<Collection<T3>>, T3>(l1: Lens<S1, A1>, i2: number, t3: Traversal<T3>): (s: S1) => Index<A1>
export function get<S1, A1 extends Indexable, A3>(l1: Lens<S1, A1>, i2: number, l3: Lens<Index<A1>, A3>): (s: S1) => A3
export function get<S1, A1 extends Collection<T2 & HasKey<K3>>, T2, K3 extends string>(l1: Lens<S1, A1>, t2: Traversal<T2>, k3: K3): (s: S1) => Functor<A1, T2, KeyAt<T2, K3>>
export function get<S1, A1 extends Collection<T2 & Indexable>, T2>(l1: Lens<S1, A1>, t2: Traversal<T2>, i3: number): (s: S1) => Functor<A1, T2, Index<T2>>
export function get<S1, A1 extends Collection<T2 & Collection<T3>>, T2, T3>(l1: Lens<S1, A1>, t2: Traversal<T2>, t3: Traversal<T3>): (s: S1) => A1
export function get<S1, A1 extends Collection<T2>, T2, A3>(l1: Lens<S1, A1>, t2: Traversal<T2>, l3: Lens<T2, A3>): (s: S1) => Functor<A1, T2, A3>
export function get<S1, A1, A2 extends HasKey<K3>, K3 extends string>(l1: Lens<S1, A1>, l2: Lens<A1, A2>, k3: K3): (s: S1) => KeyAt<A2, K3>
export function get<S1, A1, A2 extends Indexable>(l1: Lens<S1, A1>, l2: Lens<A1, A2>, i3: number): (s: S1) => Index<A2>
export function get<S1, A1, A2 extends Collection<T3>, T3>(l1: Lens<S1, A1>, l2: Lens<A1, A2>, t3: Traversal<T3>): (s: S1) => A2
export function get<S1, A1, A2, A3>(l1: Lens<S1, A1>, l2: Lens<A1, A2>, l3: Lens<A2, A3>): (s: S1) => A3
export function get<K1 extends string, K2 extends string, K3 extends string, K4 extends string>(k1: K1, k2: K2, k3: K3, k4: K4): <S extends HasKey<K1, HasKey<K2, HasKey<K3, HasKey<K4>>>>>(s: S) => KeyAt<KeyAt<KeyAt<KeyAt<S, K1>, K2>, K3>, K4>
export function get<K1 extends string, K2 extends string, K3 extends string>(k1: K1, k2: K2, k3: K3, i4: number): <S extends HasKey<K1, HasKey<K2, HasKey<K3, Indexable>>>>(s: S) => Index<KeyAt<KeyAt<KeyAt<S, K1>, K2>, K3>>
export function get<K1 extends string, K2 extends string, K3 extends string, T4>(k1: K1, k2: K2, k3: K3, t4: Traversal<T4>): <S extends HasKey<K1, HasKey<K2, HasKey<K3, Collection<T4>>>>>(s: S) => KeyAt<KeyAt<KeyAt<S, K1>, K2>, K3>
export function get<K1 extends string, K2 extends string, K3 extends string, S4, A4>(k1: K1, k2: K2, k3: K3, l4: Lens<S4, A4>): (s: HasKey<K1, HasKey<K2, HasKey<K3, S4>>>) => A4
export function get<K1 extends string, K2 extends string, K4 extends string>(k1: K1, k2: K2, i3: number, k4: K4): <S extends HasKey<K1, HasKey<K2, Indexable<HasKey<K4>>>>>(s: S) => KeyAt<Index<KeyAt<KeyAt<S, K1>, K2>>, K4>
export function get<K1 extends string, K2 extends string>(k1: K1, k2: K2, i3: number, i4: number): <S extends HasKey<K1, HasKey<K2, Indexable<Indexable>>>>(s: S) => Index<Index<KeyAt<KeyAt<S, K1>, K2>>>
export function get<K1 extends string, K2 extends string, T4>(k1: K1, k2: K2, i3: number, t4: Traversal<T4>): <S extends HasKey<K1, HasKey<K2, Indexable<Collection<T4>>>>>(s: S) => Index<KeyAt<KeyAt<S, K1>, K2>>
export function get<K1 extends string, K2 extends string, S4, A4>(k1: K1, k2: K2, i3: number, l4: Lens<S4, A4>): (s: HasKey<K1, HasKey<K2, Indexable<S4>>>) => A4
export function get<K1 extends string, K2 extends string, T3, K4 extends string>(k1: K1, k2: K2, t3: Traversal<T3>, k4: K4): <S extends HasKey<K1, HasKey<K2, Collection<T3 & HasKey<K4>>>>>(s: S) => Functor<KeyAt<KeyAt<S, K1>, K2>, Unpack<KeyAt<KeyAt<S, K1>, K2>>, KeyAt<Unpack<KeyAt<KeyAt<S, K1>, K2>>, K4>>
export function get<K1 extends string, K2 extends string, T3>(k1: K1, k2: K2, t3: Traversal<T3>, i4: number): <S extends HasKey<K1, HasKey<K2, Collection<T3 & Indexable>>>>(s: S) => Functor<KeyAt<KeyAt<S, K1>, K2>, Unpack<KeyAt<KeyAt<S, K1>, K2>>, Index<Unpack<KeyAt<KeyAt<S, K1>, K2>>>>
export function get<K1 extends string, K2 extends string, T3, T4>(k1: K1, k2: K2, t3: Traversal<T3>, t4: Traversal<T4>): <S extends HasKey<K1, HasKey<K2, Collection<T3 & Collection<T4>>>>>(s: S) => KeyAt<KeyAt<S, K1>, K2>
export function get<K1 extends string, K2 extends string, T3, S4, A4>(k1: K1, k2: K2, t3: Traversal<T3>, l4: Lens<S4, A4>): <S extends HasKey<K1, HasKey<K2, Collection<T3 & S4>>>>(s: S) => Functor<KeyAt<KeyAt<S, K1>, K2>, Unpack<KeyAt<KeyAt<S, K1>, K2>>, A4>
export function get<K1 extends string, K2 extends string, S3, A3 extends HasKey<K4>, K4 extends string>(k1: K1, k2: K2, l3: Lens<S3, A3>, k4: K4): (s: HasKey<K1, HasKey<K2, S3>>) => KeyAt<A3, K4>
export function get<K1 extends string, K2 extends string, S3, A3 extends Indexable>(k1: K1, k2: K2, l3: Lens<S3, A3>, i4: number): (s: HasKey<K1, HasKey<K2, S3>>) => Index<A3>
export function get<K1 extends string, K2 extends string, S3, A3 extends Collection<T4>, T4>(k1: K1, k2: K2, l3: Lens<S3, A3>, t4: Traversal<T4>): (s: HasKey<K1, HasKey<K2, S3>>) => A3
export function get<K1 extends string, K2 extends string, S3, A3, A4>(k1: K1, k2: K2, l3: Lens<S3, A3>, l4: Lens<A3, A4>): (s: HasKey<K1, HasKey<K2, S3>>) => A4
export function get<K1 extends string, K3 extends string, K4 extends string>(k1: K1, i2: number, k3: K3, k4: K4): <S extends HasKey<K1, Indexable<HasKey<K3, HasKey<K4>>>>>(s: S) => KeyAt<KeyAt<Index<KeyAt<S, K1>>, K3>, K4>
export function get<K1 extends string, K3 extends string>(k1: K1, i2: number, k3: K3, i4: number): <S extends HasKey<K1, Indexable<HasKey<K3, Indexable>>>>(s: S) => Index<KeyAt<Index<KeyAt<S, K1>>, K3>>
export function get<K1 extends string, K3 extends string, T4>(k1: K1, i2: number, k3: K3, t4: Traversal<T4>): <S extends HasKey<K1, Indexable<HasKey<K3, Collection<T4>>>>>(s: S) => KeyAt<Index<KeyAt<S, K1>>, K3>
export function get<K1 extends string, K3 extends string, S4, A4>(k1: K1, i2: number, k3: K3, l4: Lens<S4, A4>): (s: HasKey<K1, Indexable<HasKey<K3, S4>>>) => A4
export function get<K1 extends string, K4 extends string>(k1: K1, i2: number, i3: number, k4: K4): <S extends HasKey<K1, Indexable<Indexable<HasKey<K4>>>>>(s: S) => KeyAt<Index<Index<KeyAt<S, K1>>>, K4>
export function get<K1 extends string>(k1: K1, i2: number, i3: number, i4: number): <S extends HasKey<K1, Indexable<Indexable<Indexable>>>>(s: S) => Index<Index<Index<KeyAt<S, K1>>>>
export function get<K1 extends string, T4>(k1: K1, i2: number, i3: number, t4: Traversal<T4>): <S extends HasKey<K1, Indexable<Indexable<Collection<T4>>>>>(s: S) => Index<Index<KeyAt<S, K1>>>
export function get<K1 extends string, S4, A4>(k1: K1, i2: number, i3: number, l4: Lens<S4, A4>): (s: HasKey<K1, Indexable<Indexable<S4>>>) => A4
export function get<K1 extends string, T3, K4 extends string>(k1: K1, i2: number, t3: Traversal<T3>, k4: K4): <S extends HasKey<K1, Indexable<Collection<T3 & HasKey<K4>>>>>(s: S) => Functor<Index<KeyAt<S, K1>>, Unpack<Index<KeyAt<S, K1>>>, KeyAt<Unpack<Index<KeyAt<S, K1>>>, K4>>
export function get<K1 extends string, T3>(k1: K1, i2: number, t3: Traversal<T3>, i4: number): <S extends HasKey<K1, Indexable<Collection<T3 & Indexable>>>>(s: S) => Functor<Index<KeyAt<S, K1>>, Unpack<Index<KeyAt<S, K1>>>, Index<Unpack<Index<KeyAt<S, K1>>>>>
export function get<K1 extends string, T3, T4>(k1: K1, i2: number, t3: Traversal<T3>, t4: Traversal<T4>): <S extends HasKey<K1, Indexable<Collection<T3 & Collection<T4>>>>>(s: S) => Index<KeyAt<S, K1>>
export function get<K1 extends string, T3, S4, A4>(k1: K1, i2: number, t3: Traversal<T3>, l4: Lens<S4, A4>): <S extends HasKey<K1, Indexable<Collection<T3 & S4>>>>(s: S) => Functor<Index<KeyAt<S, K1>>, Unpack<Index<KeyAt<S, K1>>>, A4>
export function get<K1 extends string, S3, A3 extends HasKey<K4>, K4 extends string>(k1: K1, i2: number, l3: Lens<S3, A3>, k4: K4): (s: HasKey<K1, Indexable<S3>>) => KeyAt<A3, K4>
export function get<K1 extends string, S3, A3 extends Indexable>(k1: K1, i2: number, l3: Lens<S3, A3>, i4: number): (s: HasKey<K1, Indexable<S3>>) => Index<A3>
export function get<K1 extends string, S3, A3 extends Collection<T4>, T4>(k1: K1, i2: number, l3: Lens<S3, A3>, t4: Traversal<T4>): (s: HasKey<K1, Indexable<S3>>) => A3
export function get<K1 extends string, S3, A3, A4>(k1: K1, i2: number, l3: Lens<S3, A3>, l4: Lens<A3, A4>): (s: HasKey<K1, Indexable<S3>>) => A4
export function get<K1 extends string, T2, K3 extends string, K4 extends string>(k1: K1, t2: Traversal<T2>, k3: K3, k4: K4): <S extends HasKey<K1, Collection<T2 & HasKey<K3, HasKey<K4>>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, KeyAt<KeyAt<Unpack<KeyAt<S, K1>>, K3>, K4>>
export function get<K1 extends string, T2, K3 extends string>(k1: K1, t2: Traversal<T2>, k3: K3, i4: number): <S extends HasKey<K1, Collection<T2 & HasKey<K3, Indexable>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Index<KeyAt<Unpack<KeyAt<S, K1>>, K3>>>
export function get<K1 extends string, T2, K3 extends string, T4>(k1: K1, t2: Traversal<T2>, k3: K3, t4: Traversal<T4>): <S extends HasKey<K1, Collection<T2 & HasKey<K3, Collection<T4>>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, KeyAt<Unpack<KeyAt<S, K1>>, K3>>
export function get<K1 extends string, T2, K3 extends string, S4, A4>(k1: K1, t2: Traversal<T2>, k3: K3, l4: Lens<S4, A4>): <S extends HasKey<K1, Collection<T2 & HasKey<K3, S4>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, A4>
export function get<K1 extends string, T2, K4 extends string>(k1: K1, t2: Traversal<T2>, i3: number, k4: K4): <S extends HasKey<K1, Collection<T2 & Indexable<HasKey<K4>>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, KeyAt<Index<Unpack<KeyAt<S, K1>>>, K4>>
export function get<K1 extends string, T2>(k1: K1, t2: Traversal<T2>, i3: number, i4: number): <S extends HasKey<K1, Collection<T2 & Indexable<Indexable>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Index<Index<Unpack<KeyAt<S, K1>>>>>
export function get<K1 extends string, T2, T4>(k1: K1, t2: Traversal<T2>, i3: number, t4: Traversal<T4>): <S extends HasKey<K1, Collection<T2 & Indexable<Collection<T4>>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Index<Unpack<KeyAt<S, K1>>>>
export function get<K1 extends string, T2, S4, A4>(k1: K1, t2: Traversal<T2>, i3: number, l4: Lens<S4, A4>): <S extends HasKey<K1, Collection<T2 & Indexable<S4>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, A4>
export function get<K1 extends string, T2, T3, K4 extends string>(k1: K1, t2: Traversal<T2>, t3: Traversal<T3>, k4: K4): <S extends HasKey<K1, Collection<T2 & Collection<T3 & HasKey<K4>>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Functor<Unpack<KeyAt<S, K1>>, Unpack<Unpack<KeyAt<S, K1>>>, KeyAt<Unpack<Unpack<KeyAt<S, K1>>>, K4>>>
export function get<K1 extends string, T2, T3>(k1: K1, t2: Traversal<T2>, t3: Traversal<T3>, i4: number): <S extends HasKey<K1, Collection<T2 & Collection<T3 & Indexable>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Functor<Unpack<KeyAt<S, K1>>, Unpack<Unpack<KeyAt<S, K1>>>, Index<Unpack<Unpack<KeyAt<S, K1>>>>>>
export function get<K1 extends string, T2, T3, T4>(k1: K1, t2: Traversal<T2>, t3: Traversal<T3>, t4: Traversal<T4>): <S extends HasKey<K1, Collection<T2 & Collection<T3 & Collection<T4>>>>>(s: S) => KeyAt<S, K1>
export function get<K1 extends string, T2, T3, S4, A4>(k1: K1, t2: Traversal<T2>, t3: Traversal<T3>, l4: Lens<S4, A4>): <S extends HasKey<K1, Collection<T2 & Collection<T3 & S4>>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Functor<Unpack<KeyAt<S, K1>>, Unpack<Unpack<KeyAt<S, K1>>>, A4>>
export function get<K1 extends string, T2, S3, A3 extends HasKey<K4>, K4 extends string>(k1: K1, t2: Traversal<T2>, l3: Lens<S3, A3>, k4: K4): <S extends HasKey<K1, Collection<T2 & S3>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, KeyAt<A3, K4>>
export function get<K1 extends string, T2, S3, A3 extends Indexable>(k1: K1, t2: Traversal<T2>, l3: Lens<S3, A3>, i4: number): <S extends HasKey<K1, Collection<T2 & S3>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, Index<A3>>
export function get<K1 extends string, T2, S3, A3 extends Collection<T4>, T4>(k1: K1, t2: Traversal<T2>, l3: Lens<S3, A3>, t4: Traversal<T4>): <S extends HasKey<K1, Collection<T2 & S3>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, A3>
export function get<K1 extends string, T2, S3, A3, A4>(k1: K1, t2: Traversal<T2>, l3: Lens<S3, A3>, l4: Lens<A3, A4>): <S extends HasKey<K1, Collection<T2 & S3>>>(s: S) => Functor<KeyAt<S, K1>, Unpack<KeyAt<S, K1>>, A4>
export function get<K1 extends string, S2, A2 extends HasKey<K3, HasKey<K4>>, K3 extends string, K4 extends string>(k1: K1, l2: Lens<S2, A2>, k3: K3, k4: K4): (s: HasKey<K1, S2>) => KeyAt<KeyAt<A2, K3>, K4>
export function get<K1 extends string, S2, A2 extends HasKey<K3, Indexable>, K3 extends string>(k1: K1, l2: Lens<S2, A2>, k3: K3, i4: number): (s: HasKey<K1, S2>) => Index<KeyAt<A2, K3>>
export function get<K1 extends string, S2, A2 extends HasKey<K3, Collection<T4>>, K3 extends string, T4>(k1: K1, l2: Lens<S2, A2>, k3: K3, t4: Traversal<T4>): (s: HasKey<K1, S2>) => KeyAt<A2, K3>
export function get<K1 extends string, S2, A2 extends HasKey<K3>, K3 extends string, A4>(k1: K1, l2: Lens<S2, A2>, k3: K3, l4: Lens<KeyAt<A2, K3>, A4>): (s: HasKey<K1, S2>) => A4
export function get<K1 extends string, S2, A2 extends Indexable<HasKey<K4>>, K4 extends string>(k1: K1, l2: Lens<S2, A2>, i3: number, k4: K4): (s: HasKey<K1, S2>) => KeyAt<Index<A2>, K4>
export function get<K1 extends string, S2, A2 extends Indexable<Indexable>>(k1: K1, l2: Lens<S2, A2>, i3: number, i4: number): (s: HasKey<K1, S2>) => Index<Index<A2>>
export function get<K1 extends string, S2, A2 extends Indexable<Collection<T4>>, T4>(k1: K1, l2: Lens<S2, A2>, i3: number, t4: Traversal<T4>): (s: HasKey<K1, S2>) => Index<A2>
export function get<K1 extends string, S2, A2 extends Indexable, A4>(k1: K1, l2: Lens<S2, A2>, i3: number, l4: Lens<Index<A2>, A4>): (s: HasKey<K1, S2>) => A4
export function get<K1 extends string, S2, A2 extends Collection<T3 & HasKey<K4>>, T3, K4 extends string>(k1: K1, l2: Lens<S2, A2>, t3: Traversal<T3>, k4: K4): (s: HasKey<K1, S2>) => Functor<A2, T3, KeyAt<T3, K4>>
export function get<K1 extends string, S2, A2 extends Collection<T3 & Indexable>, T3>(k1: K1, l2: Lens<S2, A2>, t3: Traversal<T3>, i4: number): (s: HasKey<K1, S2>) => Functor<A2, T3, Index<T3>>
export function get<K1 extends string, S2, A2 extends Collection<T3 & Collection<T4>>, T3, T4>(k1: K1, l2: Lens<S2, A2>, t3: Traversal<T3>, t4: Traversal<T4>): (s: HasKey<K1, S2>) => A2
export function get<K1 extends string, S2, A2 extends Collection<T3>, T3, A4>(k1: K1, l2: Lens<S2, A2>, t3: Traversal<T3>, l4: Lens<T3, A4>): (s: HasKey<K1, S2>) => Functor<A2, T3, A4>
export function get<K1 extends string, S2, A2, A3 extends HasKey<K4>, K4 extends string>(k1: K1, l2: Lens<S2, A2>, l3: Lens<A2, A3>, k4: K4): (s: HasKey<K1, S2>) => KeyAt<A3, K4>
export function get<K1 extends string, S2, A2, A3 extends Indexable>(k1: K1, l2: Lens<S2, A2>, l3: Lens<A2, A3>, i4: number): (s: HasKey<K1, S2>) => Index<A3>
export function get<K1 extends string, S2, A2, A3 extends Collection<T4>, T4>(k1: K1, l2: Lens<S2, A2>, l3: Lens<A2, A3>, t4: Traversal<T4>): (s: HasKey<K1, S2>) => A3
export function get<K1 extends string, S2, A2, A3, A4>(k1: K1, l2: Lens<S2, A2>, l3: Lens<A2, A3>, l4: Lens<A3, A4>): (s: HasKey<K1, S2>) => A4
export function get<K2 extends string, K3 extends string, K4 extends string>(i1: number, k2: K2, k3: K3, k4: K4): <S extends Indexable<HasKey<K2, HasKey<K3, HasKey<K4>>>>>(s: S) => KeyAt<KeyAt<KeyAt<Index<S>, K2>, K3>, K4>
export function get<K2 extends string, K3 extends string>(i1: number, k2: K2, k3: K3, i4: number): <S extends Indexable<HasKey<K2, HasKey<K3, Indexable>>>>(s: S) => Index<KeyAt<KeyAt<Index<S>, K2>, K3>>
export function get<K2 extends string, K3 extends string, T4>(i1: number, k2: K2, k3: K3, t4: Traversal<T4>): <S extends Indexable<HasKey<K2, HasKey<K3, Collection<T4>>>>>(s: S) => KeyAt<KeyAt<Index<S>, K2>, K3>
export function get<K2 extends string, K3 extends string, S4, A4>(i1: number, k2: K2, k3: K3, l4: Lens<S4, A4>): (s: Indexable<HasKey<K2, HasKey<K3, S4>>>) => A4
export function get<K2 extends string, K4 extends string>(i1: number, k2: K2, i3: number, k4: K4): <S extends Indexable<HasKey<K2, Indexable<HasKey<K4>>>>>(s: S) => KeyAt<Index<KeyAt<Index<S>, K2>>, K4>
export function get<K2 extends string>(i1: number, k2: K2, i3: number, i4: number): <S extends Indexable<HasKey<K2, Indexable<Indexable>>>>(s: S) => Index<Index<KeyAt<Index<S>, K2>>>
export function get<K2 extends string, T4>(i1: number, k2: K2, i3: number, t4: Traversal<T4>): <S extends Indexable<HasKey<K2, Indexable<Collection<T4>>>>>(s: S) => Index<KeyAt<Index<S>, K2>>
export function get<K2 extends string, S4, A4>(i1: number, k2: K2, i3: number, l4: Lens<S4, A4>): (s: Indexable<HasKey<K2, Indexable<S4>>>) => A4
export function get<K2 extends string, T3, K4 extends string>(i1: number, k2: K2, t3: Traversal<T3>, k4: K4): <S extends Indexable<HasKey<K2, Collection<T3 & HasKey<K4>>>>>(s: S) => Functor<KeyAt<Index<S>, K2>, Unpack<KeyAt<Index<S>, K2>>, KeyAt<Unpack<KeyAt<Index<S>, K2>>, K4>>
export function get<K2 extends string, T3>(i1: number, k2: K2, t3: Traversal<T3>, i4: number): <S extends Indexable<HasKey<K2, Collection<T3 & Indexable>>>>(s: S) => Functor<KeyAt<Index<S>, K2>, Unpack<KeyAt<Index<S>, K2>>, Index<Unpack<KeyAt<Index<S>, K2>>>>
export function get<K2 extends string, T3, T4>(i1: number, k2: K2, t3: Traversal<T3>, t4: Traversal<T4>): <S extends Indexable<HasKey<K2, Collection<T3 & Collection<T4>>>>>(s: S) => KeyAt<Index<S>, K2>
export function get<K2 extends string, T3, S4, A4>(i1: number, k2: K2, t3: Traversal<T3>, l4: Lens<S4, A4>): <S extends Indexable<HasKey<K2, Collection<T3 & S4>>>>(s: S) => Functor<KeyAt<Index<S>, K2>, Unpack<KeyAt<Index<S>, K2>>, A4>
export function get<K2 extends string, S3, A3 extends HasKey<K4>, K4 extends string>(i1: number, k2: K2, l3: Lens<S3, A3>, k4: K4): (s: Indexable<HasKey<K2, S3>>) => KeyAt<A3, K4>
export function get<K2 extends string, S3, A3 extends Indexable>(i1: number, k2: K2, l3: Lens<S3, A3>, i4: number): (s: Indexable<HasKey<K2, S3>>) => Index<A3>
export function get<K2 extends string, S3, A3 extends Collection<T4>, T4>(i1: number, k2: K2, l3: Lens<S3, A3>, t4: Traversal<T4>): (s: Indexable<HasKey<K2, S3>>) => A3
export function get<K2 extends string, S3, A3, A4>(i1: number, k2: K2, l3: Lens<S3, A3>, l4: Lens<A3, A4>): (s: Indexable<HasKey<K2, S3>>) => A4
export function get<K3 extends string, K4 extends string>(i1: number, i2: number, k3: K3, k4: K4): <S extends Indexable<Indexable<HasKey<K3, HasKey<K4>>>>>(s: S) => KeyAt<KeyAt<Index<Index<S>>, K3>, K4>
export function get<K3 extends string>(i1: number, i2: number, k3: K3, i4: number): <S extends Indexable<Indexable<HasKey<K3, Indexable>>>>(s: S) => Index<KeyAt<Index<Index<S>>, K3>>
export function get<K3 extends string, T4>(i1: number, i2: number, k3: K3, t4: Traversal<T4>): <S extends Indexable<Indexable<HasKey<K3, Collection<T4>>>>>(s: S) => KeyAt<Index<Index<S>>, K3>
export function get<K3 extends string, S4, A4>(i1: number, i2: number, k3: K3, l4: Lens<S4, A4>): (s: Indexable<Indexable<HasKey<K3, S4>>>) => A4
export function get<K4 extends string>(i1: number, i2: number, i3: number, k4: K4): <S extends Indexable<Indexable<Indexable<HasKey<K4>>>>>(s: S) => KeyAt<Index<Index<Index<S>>>, K4>
export function get(i1: number, i2: number, i3: number, i4: number): <S extends Indexable<Indexable<Indexable<Indexable>>>>(s: S) => Index<Index<Index<Index<S>>>>
export function get<T4>(i1: number, i2: number, i3: number, t4: Traversal<T4>): <S extends Indexable<Indexable<Indexable<Collection<T4>>>>>(s: S) => Index<Index<Index<S>>>
export function get<S4, A4>(i1: number, i2: number, i3: number, l4: Lens<S4, A4>): (s: Indexable<Indexable<Indexable<S4>>>) => A4
export function get<T3, K4 extends string>(i1: number, i2: number, t3: Traversal<T3>, k4: K4): <S extends Indexable<Indexable<Collection<T3 & HasKey<K4>>>>>(s: S) => Functor<Index<Index<S>>, Unpack<Index<Index<S>>>, KeyAt<Unpack<Index<Index<S>>>, K4>>
export function get<T3>(i1: number, i2: number, t3: Traversal<T3>, i4: number): <S extends Indexable<Indexable<Collection<T3 & Indexable>>>>(s: S) => Functor<Index<Index<S>>, Unpack<Index<Index<S>>>, Index<Unpack<Index<Index<S>>>>>
export function get<T3, T4>(i1: number, i2: number, t3: Traversal<T3>, t4: Traversal<T4>): <S extends Indexable<Indexable<Collection<T3 & Collection<T4>>>>>(s: S) => Index<Index<S>>
export function get<T3, S4, A4>(i1: number, i2: number, t3: Traversal<T3>, l4: Lens<S4, A4>): <S extends Indexable<Indexable<Collection<T3 & S4>>>>(s: S) => Functor<Index<Index<S>>, Unpack<Index<Index<S>>>, A4>
export function get<S3, A3 extends HasKey<K4>, K4 extends string>(i1: number, i2: number, l3: Lens<S3, A3>, k4: K4): (s: Indexable<Indexable<S3>>) => KeyAt<A3, K4>
export function get<S3, A3 extends Indexable>(i1: number, i2: number, l3: Lens<S3, A3>, i4: number): (s: Indexable<Indexable<S3>>) => Index<A3>
export function get<S3, A3 extends Collection<T4>, T4>(i1: number, i2: number, l3: Lens<S3, A3>, t4: Traversal<T4>): (s: Indexable<Indexable<S3>>) => A3
export function get<S3, A3, A4>(i1: number, i2: number, l3: Lens<S3, A3>, l4: Lens<A3, A4>): (s: Indexable<Indexable<S3>>) => A4
export function get<T2, K3 extends string, K4 extends string>(i1: number, t2: Traversal<T2>, k3: K3, k4: K4): <S extends Indexable<Collection<T2 & HasKey<K3, HasKey<K4>>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, KeyAt<KeyAt<Unpack<Index<S>>, K3>, K4>>
export function get<T2, K3 extends string>(i1: number, t2: Traversal<T2>, k3: K3, i4: number): <S extends Indexable<Collection<T2 & HasKey<K3, Indexable>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Index<KeyAt<Unpack<Index<S>>, K3>>>
export function get<T2, K3 extends string, T4>(i1: number, t2: Traversal<T2>, k3: K3, t4: Traversal<T4>): <S extends Indexable<Collection<T2 & HasKey<K3, Collection<T4>>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, KeyAt<Unpack<Index<S>>, K3>>
export function get<T2, K3 extends string, S4, A4>(i1: number, t2: Traversal<T2>, k3: K3, l4: Lens<S4, A4>): <S extends Indexable<Collection<T2 & HasKey<K3, S4>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, A4>
export function get<T2, K4 extends string>(i1: number, t2: Traversal<T2>, i3: number, k4: K4): <S extends Indexable<Collection<T2 & Indexable<HasKey<K4>>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, KeyAt<Index<Unpack<Index<S>>>, K4>>
export function get<T2>(i1: number, t2: Traversal<T2>, i3: number, i4: number): <S extends Indexable<Collection<T2 & Indexable<Indexable>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Index<Index<Unpack<Index<S>>>>>
export function get<T2, T4>(i1: number, t2: Traversal<T2>, i3: number, t4: Traversal<T4>): <S extends Indexable<Collection<T2 & Indexable<Collection<T4>>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Index<Unpack<Index<S>>>>
export function get<T2, S4, A4>(i1: number, t2: Traversal<T2>, i3: number, l4: Lens<S4, A4>): <S extends Indexable<Collection<T2 & Indexable<S4>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, A4>
export function get<T2, T3, K4 extends string>(i1: number, t2: Traversal<T2>, t3: Traversal<T3>, k4: K4): <S extends Indexable<Collection<T2 & Collection<T3 & HasKey<K4>>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Functor<Unpack<Index<S>>, Unpack<Unpack<Index<S>>>, KeyAt<Unpack<Unpack<Index<S>>>, K4>>>
export function get<T2, T3>(i1: number, t2: Traversal<T2>, t3: Traversal<T3>, i4: number): <S extends Indexable<Collection<T2 & Collection<T3 & Indexable>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Functor<Unpack<Index<S>>, Unpack<Unpack<Index<S>>>, Index<Unpack<Unpack<Index<S>>>>>>
export function get<T2, T3, T4>(i1: number, t2: Traversal<T2>, t3: Traversal<T3>, t4: Traversal<T4>): <S extends Indexable<Collection<T2 & Collection<T3 & Collection<T4>>>>>(s: S) => Index<S>
export function get<T2, T3, S4, A4>(i1: number, t2: Traversal<T2>, t3: Traversal<T3>, l4: Lens<S4, A4>): <S extends Indexable<Collection<T2 & Collection<T3 & S4>>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Functor<Unpack<Index<S>>, Unpack<Unpack<Index<S>>>, A4>>
export function get<T2, S3, A3 extends HasKey<K4>, K4 extends string>(i1: number, t2: Traversal<T2>, l3: Lens<S3, A3>, k4: K4): <S extends Indexable<Collection<T2 & S3>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, KeyAt<A3, K4>>
export function get<T2, S3, A3 extends Indexable>(i1: number, t2: Traversal<T2>, l3: Lens<S3, A3>, i4: number): <S extends Indexable<Collection<T2 & S3>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, Index<A3>>
export function get<T2, S3, A3 extends Collection<T4>, T4>(i1: number, t2: Traversal<T2>, l3: Lens<S3, A3>, t4: Traversal<T4>): <S extends Indexable<Collection<T2 & S3>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, A3>
export function get<T2, S3, A3, A4>(i1: number, t2: Traversal<T2>, l3: Lens<S3, A3>, l4: Lens<A3, A4>): <S extends Indexable<Collection<T2 & S3>>>(s: S) => Functor<Index<S>, Unpack<Index<S>>, A4>
export function get<S2, A2 extends HasKey<K3, HasKey<K4>>, K3 extends string, K4 extends string>(i1: number, l2: Lens<S2, A2>, k3: K3, k4: K4): (s: Indexable<S2>) => KeyAt<KeyAt<A2, K3>, K4>
export function get<S2, A2 extends HasKey<K3, Indexable>, K3 extends string>(i1: number, l2: Lens<S2, A2>, k3: K3, i4: number): (s: Indexable<S2>) => Index<KeyAt<A2, K3>>
export function get<S2, A2 extends HasKey<K3, Collection<T4>>, K3 extends string, T4>(i1: number, l2: Lens<S2, A2>, k3: K3, t4: Traversal<T4>): (s: Indexable<S2>) => KeyAt<A2, K3>
export function get<S2, A2 extends HasKey<K3>, K3 extends string, A4>(i1: number, l2: Lens<S2, A2>, k3: K3, l4: Lens<KeyAt<A2, K3>, A4>): (s: Indexable<S2>) => A4
export function get<S2, A2 extends Indexable<HasKey<K4>>, K4 extends string>(i1: number, l2: Lens<S2, A2>, i3: number, k4: K4): (s: Indexable<S2>) => KeyAt<Index<A2>, K4>
export function get<S2, A2 extends Indexable<Indexable>>(i1: number, l2: Lens<S2, A2>, i3: number, i4: number): (s: Indexable<S2>) => Index<Index<A2>>
export function get<S2, A2 extends Indexable<Collection<T4>>, T4>(i1: number, l2: Lens<S2, A2>, i3: number, t4: Traversal<T4>): (s: Indexable<S2>) => Index<A2>
export function get<S2, A2 extends Indexable, A4>(i1: number, l2: Lens<S2, A2>, i3: number, l4: Lens<Index<A2>, A4>): (s: Indexable<S2>) => A4
export function get<S2, A2 extends Collection<T3 & HasKey<K4>>, T3, K4 extends string>(i1: number, l2: Lens<S2, A2>, t3: Traversal<T3>, k4: K4): (s: Indexable<S2>) => Functor<A2, T3, KeyAt<T3, K4>>
export function get<S2, A2 extends Collection<T3 & Indexable>, T3>(i1: number, l2: Lens<S2, A2>, t3: Traversal<T3>, i4: number): (s: Indexable<S2>) => Functor<A2, T3, Index<T3>>
export function get<S2, A2 extends Collection<T3 & Collection<T4>>, T3, T4>(i1: number, l2: Lens<S2, A2>, t3: Traversal<T3>, t4: Traversal<T4>): (s: Indexable<S2>) => A2
export function get<S2, A2 extends Collection<T3>, T3, A4>(i1: number, l2: Lens<S2, A2>, t3: Traversal<T3>, l4: Lens<T3, A4>): (s: Indexable<S2>) => Functor<A2, T3, A4>
export function get<S2, A2, A3 extends HasKey<K4>, K4 extends string>(i1: number, l2: Lens<S2, A2>, l3: Lens<A2, A3>, k4: K4): (s: Indexable<S2>) => KeyAt<A3, K4>
export function get<S2, A2, A3 extends Indexable>(i1: number, l2: Lens<S2, A2>, l3: Lens<A2, A3>, i4: number): (s: Indexable<S2>) => Index<A3>
export function get<S2, A2, A3 extends Collection<T4>, T4>(i1: number, l2: Lens<S2, A2>, l3: Lens<A2, A3>, t4: Traversal<T4>): (s: Indexable<S2>) => A3
export function get<S2, A2, A3, A4>(i1: number, l2: Lens<S2, A2>, l3: Lens<A2, A3>, l4: Lens<A3, A4>): (s: Indexable<S2>) => A4
export function get<T1, K2 extends string, K3 extends string, K4 extends string>(t1: Traversal<T1>, k2: K2, k3: K3, k4: K4): <S extends Collection<T1 & HasKey<K2, HasKey<K3, HasKey<K4>>>>>(s: S) => Functor<S, Unpack<S>, KeyAt<KeyAt<KeyAt<Unpack<S>, K2>, K3>, K4>>
export function get<T1, K2 extends string, K3 extends string>(t1: Traversal<T1>, k2: K2, k3: K3, i4: number): <S extends Collection<T1 & HasKey<K2, HasKey<K3, Indexable>>>>(s: S) => Functor<S, Unpack<S>, Index<KeyAt<KeyAt<Unpack<S>, K2>, K3>>>
export function get<T1, K2 extends string, K3 extends string, T4>(t1: Traversal<T1>, k2: K2, k3: K3, t4: Traversal<T4>): <S extends Collection<T1 & HasKey<K2, HasKey<K3, Collection<T4>>>>>(s: S) => Functor<S, Unpack<S>, KeyAt<KeyAt<Unpack<S>, K2>, K3>>
export function get<T1, K2 extends string, K3 extends string, S4, A4>(t1: Traversal<T1>, k2: K2, k3: K3, l4: Lens<S4, A4>): <S extends Collection<T1 & HasKey<K2, HasKey<K3, S4>>>>(s: S) => Functor<S, Unpack<S>, A4>
export function get<T1, K2 extends string, K4 extends string>(t1: Traversal<T1>, k2: K2, i3: number, k4: K4): <S extends Collection<T1 & HasKey<K2, Indexable<HasKey<K4>>>>>(s: S) => Functor<S, Unpack<S>, KeyAt<Index<KeyAt<Unpack<S>, K2>>, K4>>
export function get<T1, K2 extends string>(t1: Traversal<T1>, k2: K2, i3: number, i4: number): <S extends Collection<T1 & HasKey<K2, Indexable<Indexable>>>>(s: S) => Functor<S, Unpack<S>, Index<Index<KeyAt<Unpack<S>, K2>>>>
export function get<T1, K2 extends string, T4>(t1: Traversal<T1>, k2: K2, i3: number, t4: Traversal<T4>): <S extends Collection<T1 & HasKey<K2, Indexable<Collection<T4>>>>>(s: S) => Functor<S, Unpack<S>, Index<KeyAt<Unpack<S>, K2>>>
export function get<T1, K2 extends string, S4, A4>(t1: Traversal<T1>, k2: K2, i3: number, l4: Lens<S4, A4>): <S extends Collection<T1 & HasKey<K2, Indexable<S4>>>>(s: S) => Functor<S, Unpack<S>, A4>
export function get<T1, K2 extends string, T3, K4 extends string>(t1: Traversal<T1>, k2: K2, t3: Traversal<T3>, k4: K4): <S extends Collection<T1 & HasKey<K2, Collection<T3 & HasKey<K4>>>>>(s: S) => Functor<S, Unpack<S>, Functor<KeyAt<Unpack<S>, K2>, Unpack<KeyAt<Unpack<S>, K2>>, KeyAt<Unpack<KeyAt<Unpack<S>, K2>>, K4>>>
export function get<T1, K2 extends string, T3>(t1: Traversal<T1>, k2: K2, t3: Traversal<T3>, i4: number): <S extends Collection<T1 & HasKey<K2, Collection<T3 & Indexable>>>>(s: S) => Functor<S, Unpack<S>, Functor<KeyAt<Unpack<S>, K2>, Unpack<KeyAt<Unpack<S>, K2>>, Index<Unpack<KeyAt<Unpack<S>, K2>>>>>
export function get<T1, K2 extends string, T3, T4>(t1: Traversal<T1>, k2: K2, t3: Traversal<T3>, t4: Traversal<T4>): <S extends Collection<T1 & HasKey<K2, Collection<T3 & Collection<T4>>>>>(s: S) => Functor<S, Unpack<S>, KeyAt<Unpack<S>, K2>>
export function get<T1, K2 extends string, T3, S4, A4>(t1: Traversal<T1>, k2: K2, t3: Traversal<T3>, l4: Lens<S4, A4>): <S extends Collection<T1 & HasKey<K2, Collection<T3 & S4>>>>(s: S) => Functor<S, Unpack<S>, Functor<KeyAt<Unpack<S>, K2>, Unpack