UNPKG

foreword

Version:

A JavaScript library for functional data transformation

234 lines (186 loc) 3.36 kB
const curry = require('./curry') // Basic functions function always (a, b) { return a } function and (a, b) { return a && b } function ap (fs, arr) { return fs.reduce((acc, f) => { return acc.concat(arr.map(f)) }, []) } function apply (f, a) { return f(a) } function ascend (a, b) { return a < b ? -1 : a > b ? 1 : 0 } function ascendBy (f, a, b) { return ascend(f(a), f(b)) } function both (f, g, a) { return f(a) && g(a) } function branch (p, f, g, a) { return p(a) ? f(a) : g(a) } function complement (f, a) { return !f(a) } function compose (f, g, a) { return f(g(a)) } function descend (a, b) { return a > b ? -1 : a < b ? 1 : 0 } function descendBy (f, a, b) { return descend(f(a), f(b)) } function either (f, g, a) { return f(a) || g(a) } function equal (a, b) { return a === b } function equalBy (f, a, b) { return f(a) === f(b) } function flip (f, a, b) { return f(b, a) } function gt (a, b) { return b > a } function gte (a, b) { return b >= a } function id (a) { return a } function lt (a, b) { return b < a } function lte (a, b) { return b <= a } function match (arr, a) { return arr.reduce((acc, f) => { return acc !== undefined ? acc : f(a) }, undefined) } function not (a) { return !a } function on (f, g, a, b) { return f(g(a), g(b)) } function or (a, b) { return a || b } function pipe (arr, init) { return arr.reduce((acc, f) => f(acc), init) } function unless (f, g, a) { return f(a) ? undefined : g(a) } function when (f, g, a) { return f(a) ? g(a) : undefined } // Math function add (a, b) { return a + b } function between (a, b, n) { return a <= n && b >= n } function clamp (a, b, c) { return c < a ? a : c > b ? b : c } function dec (n) { return n - 1 } function divide (a, b) { return b / a } function inc (n) { return n + 1 } function isEven (n) { return n % 2 === 0 } function isOdd (n) { return n % 2 !== 0 } function max (a, b) { return a > b ? a : b } function min (a, b) { return a > b ? b : a } function mod (a, b) { return ((a % b) + b) % b } function multiply (a, b) { return a * b } function negate (n) { return -n } function pow (a, b) { return Math.pow(b, a) } function rem (a, b) { return b % a } function subtract (a, b) { return b - a } module.exports = { add: curry(2, add), always: curry(2, always), and: curry(2, and), ap: curry(2, ap), apply: curry(2, apply), ascend: curry(2, ascend), ascendBy: curry(3, ascendBy), between: curry(3, between), both: curry(3, both), branch: curry(4, branch), clamp: curry(3, clamp), complement: curry(2, complement), compose: curry(3, compose), curry, dec, descend: curry(2, descend), descendBy: curry(3, descendBy), divide: curry(2, divide), either: curry(3, either), equal: curry(2, equal), equalBy: curry(3, equalBy), flip: curry(3, flip), gt: curry(2, gt), gte: curry(2, gte), id, inc, isEven, isOdd, lt: curry(2, lt), lte: curry(2, lte), match: curry(2, match), max: curry(2, max), min: curry(2, min), mod: curry(2, mod), multiply: curry(2, multiply), negate, not, on: curry(4, on), or: curry(2, or), pipe: curry(2, pipe), pow: curry(2, pow), rem: curry(2, rem), subtract: curry(2, subtract), unless: curry(3, unless), when: curry(3, when) }