import { fromUndefinedable } from './Option'; import { pipe } from './function'; export const map = (f: (a: A) => B) => (arr: Array) => arr.map(f); export const filter = (f: (a: A) => boolean) => (arr: Array) => arr.filter(f); export const reject = (f: (a: A) => boolean) => (arr: Array) => arr.filter(a => !f(a)); export const find = (f: (a: A) => boolean) => (arr: Array) => pipe(arr, array => array.find(f), fromUndefinedable); export const reduce = ( reduceFn: (acc: B, cur: A, index: number) => B, init: B ) => (arr: Array) => arr.reduce(reduceFn, init); export const flat = (arr: Array>) => reduce((acc: Array, current: Array) => [...acc, ...current], [])(arr);