import { removeDuplicates } from "./removeDuplicates"; import { allEquals } from "./allEquals"; import { ReduceArguments, toReduceArguments } from "./reduceify"; export function arrAllUniq( arr: readonly ArrOf[], areEquals: (e1: ArrOf, e2: ArrOf) => boolean = (e1, e2) => e1 === e2 ): boolean { return [ arr.reduce(...removeDuplicates(areEquals)), arr ] .map(arr => arr.length) .reduce(...allEquals((x1, x2) => x1 === x2)) ; } export function allUniq( areEquals?: (e1: ArrOf, e2: ArrOf) => boolean ): ReduceArguments { return toReduceArguments(arrAllUniq, areEquals); } export function allUniqFactory({ areEquals }: {areEquals: (e1: T, e2: T) => boolean}){ return { "allUniq": () => allUniq(areEquals) }; }