UNPKG

f-utility

Version:

functional utilities

41 lines (35 loc) 1.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ap = exports.__ap = undefined; var _katsuCurry = require("katsu-curry"); var _types = require("./types"); var _reduce = require("./reduce"); var _map = require("./map"); var __ap = exports.__ap = function __ap(applicative, functor) { if (functor && functor.ap && (0, _types.isFunction)(functor.ap)) return functor.ap(applicative); if ((0, _types.isFunction)(functor)) return function (x) { return applicative(x)(functor(x)); }; return (0, _reduce.reduce)(function (agg, f) { return agg.concat((0, _map.map)(f, functor)); }, [], applicative); }; /** * Apply a list of functions to a list of values * @method ap * @param {function|functions[]} applicative - a single function or array of applicatives * @param {Array} functor - an array of values * @returns {Array} a concatenated list of all applicatives applied to all values * @public * @example * import {ap} from 'f-utility' * ap([ * (x) => x.toUppercase(), * (x) => `${x} batteries` * ], * `abc`.split(``) * ) // [`A`, `B`, `C`, `a batteries`, `b batteries`, `c batteries`] */ var ap = exports.ap = (0, _katsuCurry.curry)(__ap);