File: D:/HostingSpaces/SBogers10/bomacon.komma.pro/node_modules/ramda/src/ap.js
var _concat = require('./internal/_concat');
var _curry2 = require('./internal/_curry2');
var _reduce = require('./internal/_reduce');
var map = require('./map');
/**
* ap applies a list of functions to a list of values.
*
* Dispatches to the `ap` method of the second argument, if present. Also
* treats curried functions as applicatives.
*
* @func
* @memberOf R
* @since v0.3.0
* @category Function
* @sig [a -> b] -> [a] -> [b]
* @sig Apply f => f (a -> b) -> f a -> f b
* @param {*} applyF
* @param {*} applyX
* @return {*}
* @example
*
* R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6]
* R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> ["tasty pizza", "tasty salad", "PIZZA", "SALAD"]
* @symb R.ap([f, g], [a, b]) = [f(a), f(b), g(a), g(b)]
*/
module.exports = _curry2(function ap(applyF, applyX) {
return (
typeof applyX['fantasy-land/ap'] === 'function' ?
applyX['fantasy-land/ap'](applyF) :
typeof applyF.ap === 'function' ?
applyF.ap(applyX) :
typeof applyF === 'function' ?
function(x) { return applyF(x)(applyX(x)); } :
// else
_reduce(function(acc, f) { return _concat(acc, map(f, applyX)); }, [], applyF)
);
});