import * as Eq from 'fp-ts/lib/Eq';
import * as O from 'fp-ts/lib/Option';
export * from 'fp-ts/lib/ReadonlyArray';
/**
* Unsafely coerce the ReadonlyArray to an Array
*/
export declare const unsafeCoerceToArray: (readonlyArray: readonly A[]) => A[];
/**
* Unsafely coerce an Array to a ReadonlyArray
*/
export declare const unsafeCoerceFromArray: (array: A[]) => readonly A[];
/**
* Gets the head and tail parts of the array as an object, if possible.
*
* This is often referred to "uncons," as it's the opposite of constructing an array with a head and tail.
*/
export declare const headAndTailS: (a: readonly A[]) => O.Option<{
head: A;
tail: readonly A[];
}>;
/**
* Gets the head and tail parts of the array as a tuple, if possible.
*
* This is often referred to "uncons," as it's the opposite of constructing an array with a head and tail.
*/
export declare const headAndTailT: (a: readonly A[]) => O.Option<[A, readonly A[]]>;
/**
* Gets the init and last parts of the array as an object, if possible.
*
* This is like an "uncons" for the end of the array.
*/
export declare const initAndLastS: (a: readonly A[]) => O.Option<{
init: readonly A[];
last: A;
}>;
/**
* Gets the init and last parts of the array as a tuple, if possible.
*
* This is like an "uncons" for the end of the array.
*/
export declare const initAndLastT: (a: readonly A[]) => O.Option<[readonly A[], A]>;
/**
* Returns an array of elements which are in both input arrays but not in their
* intersection. Also known as symmetric difference or disjunctive union.
*/
export declare const xor: (eq: Eq.Eq) => (xs: readonly A[], ys: readonly A[]) => A[];