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);