import type { Optic, TryA, TryT, A, B, S, T } from './optic.js'; import type { ArrayExpected, ArrayOfExpected } from './errors.js'; interface FilterA extends A { 0: TryA extends Item[] ? Item[] : ArrayOfExpected>>; } interface FilterNarrowA extends A { 0: TryA extends Item[] ? Narrowed[] : ArrayOfExpected>>; } interface FilterT extends T { 0: TryT extends Item[] ? B extends any[] ? S | B : ArrayExpected> : ArrayOfExpected>>; } export type Filter = Optic<'Lens', FilterA, FilterT>; export type FilterNarrow = Optic<'Lens', FilterNarrowA, FilterT>; export declare function filter(pred: (v: Item) => v is Narrowed): FilterNarrow; export declare function filter(pred: (v: Item) => boolean): Filter; export {};