import type { Eq } from "@principia/prelude/Eq";
import * as Ord from "@principia/prelude/Ord";
import type { Either } from "../Either";
import type { Predicate, Refinement } from "../Function";
import type { NonEmptyArray } from "../NonEmptyArray";
import type { Option } from "../Option";
export declare const append_: (xs: readonly A[], ys: readonly A[]) => readonly A[];
export declare const append: (ys: readonly A[]) => (xs: readonly A[]) => readonly A[];
export declare const lookup_: (i: number, as: readonly A[]) => Option;
export declare const lookup: (i: number) => (as: readonly A[]) => Option;
export declare const scanl: (b: B, f: (b: B, a: A) => B) => (as: readonly A[]) => readonly B[];
export declare const scanr: (b: B, f: (a: A, b: B) => B) => (as: readonly A[]) => readonly B[];
export declare const cons_: (head: A, tail: readonly A[]) => NonEmptyArray;
export declare const cons: (tail: readonly A[]) => (head: A) => NonEmptyArray;
export declare const snoc_: (init: readonly A[], end: A) => NonEmptyArray;
export declare const snoc: (end: A) => (init: readonly A[]) => NonEmptyArray;
export declare const head: (as: readonly A[]) => Option;
export declare const tail: (as: readonly A[]) => Option;
export declare const last: (as: readonly A[]) => Option;
export declare const init: (as: readonly A[]) => Option;
export declare const takel: (n: number) => (as: readonly A[]) => readonly A[];
export declare const taker: (n: number) => (as: readonly A[]) => readonly A[];
export declare const takelWhile: {
(refinement: Refinement): (as: ReadonlyArray) => ReadonlyArray;
(predicate: Predicate): (as: ReadonlyArray) => ReadonlyArray;
};
export interface Spanned {
readonly init: ReadonlyArray;
readonly rest: ReadonlyArray;
}
export declare const spanl: {
(refinement: Refinement): (as: ReadonlyArray) => Spanned;
(predicate: Predicate): (as: ReadonlyArray) => Spanned;
};
export declare const dropl: (n: number) => (as: readonly A[]) => readonly A[];
export declare const dropr: (n: number) => (as: readonly A[]) => readonly A[];
export declare const droprWhile: (predicate: Predicate) => (as: readonly A[]) => readonly A[];
export declare const findr: {
(refinement: Refinement): (as: ReadonlyArray) => Option;
(predicate: Predicate): (as: ReadonlyArray) => Option;
};
export declare const findrMap: (f: (a: A) => Option) => (as: readonly A[]) => Option;
export declare const findl: {
(refinement: Refinement): (as: ReadonlyArray) => Option;
(predicate: Predicate): (as: ReadonlyArray) => Option;
};
export declare const findlMap: (f: (a: A) => Option) => (as: readonly A[]) => Option;
export declare const findlIndex_: (as: readonly A[], predicate: Predicate) => Option;
export declare const findlIndex: (predicate: Predicate) => (as: readonly A[]) => Option;
export declare const findrIndex: (predicate: Predicate) => (as: readonly A[]) => Option;
export declare const unsafeInsertAt: (i: number, a: A, as: readonly A[]) => readonly A[];
export declare const unsafeUpdateAt: (i: number, a: A, as: readonly A[]) => readonly A[];
export declare const unsafeDeleteAt: (i: number, as: readonly A[]) => readonly A[];
export declare const insertAt_: (as: readonly A[], i: number, a: A) => Option;
export declare const insertAt: (i: number, a: A) => (as: readonly A[]) => Option;
export declare const updateAt_: (as: readonly A[], i: number, a: A) => Option;
export declare const updateAt: (i: number, a: A) => (as: readonly A[]) => Option;
export declare const deleteAt_: (as: readonly A[], i: number) => Option;
export declare const deleteAt: (i: number) => (as: readonly A[]) => Option;
/**
* Apply a function to the element at the specified index, creating a new array, or returning `None` if the index is out
* of bounds
*
* @since 1.0.0
*/
export declare const modifyAt_: (as: readonly A[], i: number, f: (a: A) => A) => Option;
/**
* Apply a function to the element at the specified index, creating a new array, or returning `None` if the index is out
* of bounds
*
* @since 1.0.0
*/
export declare const modifyAt: (i: number, f: (a: A) => A) => (as: readonly A[]) => Option;
export declare const reverse: (as: readonly A[]) => readonly A[];
export declare const rights: (as: readonly Either[]) => readonly A[];
export declare const lefts: (as: readonly Either[]) => readonly E[];
export declare const sort: (O: Ord.Ord) => (as: readonly A[]) => readonly A[];
export declare const unzip: (as: readonly (readonly [A, B])[]) => readonly [readonly A[], readonly B[]];
export declare const elem: (E: Eq) => (a: A) => (as: readonly A[]) => boolean;
export declare const uniq: (E: Eq) => (as: readonly A[]) => readonly A[];
export declare const sortBy: (ords: readonly Ord.Ord[]) => (as: readonly A[]) => readonly A[];
export declare const comprehension: {
(
input: readonly [ReadonlyArray, ReadonlyArray, ReadonlyArray, ReadonlyArray],
f: (a: A, b: B, c: C, d: D) => R,
g?: (a: A, b: B, c: C, d: D) => boolean
): ReadonlyArray;
(
input: readonly [ReadonlyArray, ReadonlyArray, ReadonlyArray],
f: (a: A, b: B, c: C) => R,
g?: (a: A, b: B, c: C) => boolean
): ReadonlyArray;
(
input: readonly [ReadonlyArray, ReadonlyArray],
f: (a: A, b: B) => R,
g?: (a: A, b: B) => boolean
): ReadonlyArray;
(input: readonly [ReadonlyArray], f: (a: A) => boolean, g?: (a: A) => R): ReadonlyArray;
};
export declare const union: (E: Eq) => (ys: readonly A[]) => (xs: readonly A[]) => readonly A[];
export declare const intersection: (E: Eq) => (ys: readonly A[]) => (xs: readonly A[]) => readonly A[];
export declare const chop_: (
as: readonly A[],
f: (as: NonEmptyArray) => readonly [B, readonly A[]]
) => readonly B[];
export declare const chop: (
f: (as: NonEmptyArray) => readonly [B, readonly A[]]
) => (as: readonly A[]) => readonly B[];
export declare const splitAt: (n: number) => (as: readonly A[]) => readonly [readonly A[], readonly A[]];
export declare const chunksOf: (n: number) => (as: readonly A[]) => readonly (readonly A[])[];
export declare const difference: (E: Eq) => (ys: readonly A[]) => (xs: readonly A[]) => readonly A[];
export declare const dropLeft_: (as: readonly A[], n: number) => readonly A[];
export declare const dropLeft: (n: number) => (as: readonly A[]) => readonly A[];
export declare const dropRight_: (as: readonly A[], n: number) => readonly A[];
export declare const dropRight: (n: number) => (as: readonly A[]) => readonly A[];
export declare const dropLeftWhile_: (as: readonly A[], predicate: Predicate) => readonly A[];
export declare const dropLeftWhile: (predicate: Predicate) => (as: readonly A[]) => readonly A[];
//# sourceMappingURL=combinators.d.ts.map