Standard Library

@todo - more information

IO

const print = string => console.log(string);
const inspect = value => console.log(typeof value, value);

String

function format() {
  let [string, ...values] = arguments;
  values = [].concat(...values);

  if (values.length === 0) {
    return string;
  }

  const match = string.match(/(^\\$)|([^\\\\])\\$/);
  const index = match['index'];

  if (index === 0) {
    const result = String(values[0]) + string.substring(1);

    return format(result, values.slice(1));
  }

  const result =
    string.substring(0, index) +
    match[2] +
    String(values[0]) +
    string.substring(index + 2);

  return format(result, values.slice(1));
}

Logic

const sif = (bool, a, b) => (bool ? a : b);
const and = (a, b) => a && b;
const or = (a, b) => a || b;
const not = a => !a;
const eq = (a, b) => a === b;
const lt = (a, b) => a < b;
const gt = (a, b) => a > b;
const lte = (a, b) => a <= b;
const gte = (a, b) => a >= b;

Math

const add = (a, b) => a + b;
const sub = (a, b) => a - b;
const mul = (a, b) => a * b;
const div = (a, b) => a / b;
const mod = (a, b) => a % b;
const pow = (a, b) => a ** b;

Lists

const map = (list, lambda) => list.map(lambda);
const filter = (list, lambda) => list.filter(lambda);
const find = (list, lambda) => list.find(lambda);
const every = (list, lambda) => list.every(lambda);
const some = (list, lambda) => list.some(lambda);
const flatten = list => [].concat(...list);
const each = (list, lambda) => list.forEach(lambda);
const push = (list, element) => [...list, element];
const pop = (list, index = null) =>
  list[index === null ? list.length - 1 : index];
const first = list => list[0];
const last = list => list[list.length - 1];
const reduce = (list, lambda, accumulator) => list.reduce(lambda, accumulator);
const reverse = list => __deepClone__(list).reverse();
const diff = (a, b) => a.filter(e => !b.includes(e));
const range = (start, end, step = 1) => {
  const result = [];
  let current = start;

  while (current < end) {
    result.push(current);
    current += step;
  }

  return result;
};
const merge = (a, b) => [...a, ...b];
const length = list => list.length;
const contains = (list, element) => list.includes(element);
const sort = list => __deepClone__(list).sort();
const sum = list => list.reduce((e, a) => e + a, 0);
const join = (list, sep) => list.join(sep);

Misc

const raise = string => {
  throw string;
};