import { PType } from "../../../PType/index.js";
import { TermFn, PList, PLam, PBool } from "../../../PTypes/index.js";
import { Term } from "../../../Term/index.js";
import { TermType, ToPType } from "../../../type_system/index.js";
import { PappArg } from "../../pappArg.js";
export declare function pstrictChooseList<ListElemT extends TermType, ReturnT extends TermType>(listElemType: ListElemT, returnType: ReturnT): TermFn<[PList<ToPType<ListElemT>>, ToPType<ReturnT>, ToPType<ReturnT>], ToPType<ReturnT>>;
export declare function pchooseList<ListElemT extends TermType, ReturnT extends TermType>(listElemType?: ListElemT | undefined, returnType?: ReturnT | undefined): Term<PLam<PList<ToPType<ListElemT>>, PLam<ToPType<ReturnT>, PLam<ToPType<ReturnT>, ToPType<ReturnT>>>>> & {
    $: (list: PappArg<PList<ToPType<ListElemT>>>) => Term<PLam<ToPType<ReturnT>, PLam<ToPType<ReturnT>, ToPType<ReturnT>>>> & {
        caseNil: (nilCase: PappArg<ToPType<ReturnT>>) => TermFn<[ToPType<ReturnT>], ToPType<ReturnT>> & {
            caseCons: (consCase: PappArg<ToPType<ReturnT>>) => Term<ToPType<ReturnT>>;
        };
        $: (nilCase: PappArg<ToPType<ReturnT>>) => TermFn<[ToPType<ReturnT>], ToPType<ReturnT>> & {
            caseCons: (consCase: PappArg<ToPType<ReturnT>>) => Term<ToPType<ReturnT>>;
        };
    };
};
export declare function phead<ListElemT extends TermType>(listElemType: ListElemT): TermFn<[PList<ToPType<ListElemT>>], ToPType<ListElemT>>;
export declare function ptail<ListElemT extends TermType>(listElemT: ListElemT): TermFn<[PList<ToPType<ListElemT>>], PList<ToPType<ListElemT>>>;
export declare const pisEmpty: TermFn<[PList<PType>], PBool>;
