import type { List, Pair } from '../stdlib/list';
/**
 * Low-level check for a list.
 * @param value any value
 * @returns whether the value is a list
 */
export declare function isList(value: any): value is List;
/**
 * Turn a list into an array.
 * @param value a list
 * @returns
 */
export declare function flattenList(value: List): any[];
/**
 * Convert an array into a list.
 * @param arr
 * @returns
 */
export declare function arrayToList(arr: any[]): List;
/**
 * Convert an array into an improper list.
 * @param arr
 * @param last
 * @returns
 */
export declare function arrayToImproperList(arr: any[], last: any): any;
/**
 * Check if a value is an improper list.
 * We force an improper list to be an array of two elements.
 * @param value
 * @returns
 */
export declare function isImproperList(value: any): value is Pair<any, any>;
/**
 * Check if a value is a pair.
 * @param value
 * @returns
 */
export declare function isPair(value: any): value is Pair<any, any>;
/**
 * Convert an improper list into an array and a terminator.
 * @param value
 * @returns
 */
export declare function flattenImproperList(value: any): [any[], any];
/**
 * Get the length of an improper list.
 * @param value
 * @returns
 */
export declare function improperListLength(value: any): number;
