import type { Lazy } from "../Function"; import { isEmpty } from "./guards"; /* * ------------------------------------------- * Array Destructors * ------------------------------------------- */ export const foldl = (onNil: Lazy, onCons: (head: A, tail: ReadonlyArray) => B) => ( as: ReadonlyArray ): B => (isEmpty(as) ? onNil() : onCons(as[0], as.slice(1))); export const foldr = (onNil: Lazy, onCons: (init: ReadonlyArray, last: A) => B) => ( as: ReadonlyArray ): B => (isEmpty(as) ? onNil() : onCons(as.slice(0, as.length - 1), as[as.length - 1]));