lambda-chop
Version:
Sweet.js macros for lambdas with currying, bound functions, and placeholders.
20 lines (19 loc) • 723 B
JavaScript
var curry = λ fn a b -> fn(a, b);
var curry3 = λ fn a b c -> fn(a, b, c);
var curry4 = λ fn a b c d -> fn(a, b, c, d);
var uncurry = λ fn (a, b) -> fn(a)(b);
var uncurry3 = λ fn (a, b, c) -> fn(a)(b)(c);
var uncurry4 = λ fn (a, b, c, d) -> fn(a)(b)(c)(d);
var unary = λ fn x -> fn(x);
var arity2 = λ fn (x, y) -> fn(x, y);
var arity3 = λ fn (x, y, z) -> fn(x, y, z);
var flip = λ fn (x, y) -> fn(y, x);
var always = λ x y -> x;
var get = λ k o -> o[k];
var map = λ(fn, xs) -> xs.map(unary(fn));
var filter = λ(fn, xs) -> xs.filter(unary(fn));
var reduce = λ(fn, xs, acc) -> xs.reduce(arity2(fn), acc);
var head = λ[#[0]];
var tail = λ[#.slice(1)];
var cons = λ[[#].concat(#)];
var snoc = λ[#.concat(#)];