export const map = (xs: ArrayLike, f: (a: A) => B): B[] => { const len = xs.length; const r = new Array(len); for (let i = 0; i < len; i++) { const x = xs[i]; r[i] = f(x); } return r; }; /** map a function over an array, then map another function over every item except the last */ export const mapDelimit = (xs: ArrayLike, f: (a: A) => B, delimit: (b: B) => B): B[] => { const len = xs.length; const r = new Array(len); for (let i = 0; i < len - 1; i++) { const x = xs[i]; r[i] = delimit(f(x)); } if (len > 0) { r[len - 1] = (f(xs[len - 1])); } return r; }; export const sort = (xs: ArrayLike, compareFn?: (a: A, b: A) => number): A[] => { const clone: A[] = Array.prototype.slice.call(xs); return clone.sort(compareFn); };