Appendix A: Essential Functions Support
always
// always :: a -> b -> a
const always = curry((a, b) => a);compose
// compose :: ((y -> z), (x -> y), ..., (a -> b)) -> a -> z
const compose = (...fns) => (...args) => fns.reduceRight((res, fn) => [fn.call(null, ...res)], args)[0];curry
// curry :: ((a, b, ...) -> c) -> a -> b -> ... -> c
function curry(fn) {
const arity = fn.length;
return function $curry(...args) {
if (args.length < arity) {
return $curry.bind(null, ...args);
}
return fn.call(null, ...args);
};
}either
identity
inspect
left
liftA2
liftA3
maybe
nothing
reject
Last updated