f-utility
Version:
functional utilities
41 lines (35 loc) • 1.21 kB
JavaScript
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);
;