import { TotalRO, QtyRO, PriceRO, ItemRO, ItemQtyRO } from '../readonlyInterfaces'; export declare type NumberToPrice = (input: number) => number; export declare const addPrices: (ntp: NumberToPrice) => (...prices: number[]) => number; export declare const minusPrice: (ntp: NumberToPrice) => (a: number, b: number) => number; export declare const itemPrice: (ntp: NumberToPrice) => ({ price, qty }: T) => number; export declare const enrichItem: (ntp: NumberToPrice) => (item: T) => T & { total: number; }; export declare const itemDiscount: (ntp: NumberToPrice) => ({ total, ...item }: T) => number; export declare const divideTotal: (ntp: NumberToPrice) => (item: T) => T[]; declare type R = readonly T[]; export declare type ItemReduce = (id: string, init: U) => (items: R, reducer: (acc: U, item: T) => U) => U; export declare const itemsGroupReduce: (itemsReduce: ItemReduce) => (init: (item: T) => U) => (items: R, reducer: (acc: U, item: T) => U) => U[]; export declare const takeItem: (ntp: { up: NumberToPrice; down: NumberToPrice; }) => (cheapest: boolean) => (from: R, item: U) => (U & T)[]; export declare const takeItems: ({ up, down, reduce }: { up: NumberToPrice; down: NumberToPrice; reduce: ItemReduce; }) => (cheapest: boolean) => (from: R, items: R) => (U & T)[]; export declare const spreadAdjustment: (ntp: NumberToPrice) => (amount: number, items: R) => { amount: number; items: R; next: () => R; }; export declare const minusItem: (ntp: NumberToPrice) => (item: U) => (from: R) => T[]; export {};