import type { Optic, TryA, TryT, A, B, S, T } from './optic.js'; import type { TupleExpected } from './errors.js'; export type Prec = N extends 6 ? 5 : N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : N extends 2 ? 1 : N extends 1 ? 0 : never; export type AnyTuple = N extends 0 ? Acc : AnyTuple, [...Acc, any]>; interface NthA extends A { 0: TryA extends [...AnyTuple, infer Elem, ...any[]] ? Elem : TupleExpected>>; } type SetNthRec = N extends 0 ? S extends [any, ...infer U] ? [B, ...U] : never : S extends [infer U, ...infer V] ? [U, ...SetNthRec, B, V>] : never; interface NthT extends T { 0: TryT extends [...AnyTuple, any, ...any[]] ? SetNthRec, S> : TupleExpected>>; } export type Nth = Optic<'Lens', NthA, NthT>; export declare const nth: (n: N) => Nth; export {};