UNPKG

762 BJavaScriptView Raw
1var indexOf = require('../array/indexOf');
2var slice = require('../array/slice');
3var take = require('../array/take');
4
5 var _ = {};
6
7 /**
8 * Creates a partially applied function.
9 */
10 function partial(f) {
11 var as = slice(arguments, 1);
12 var has_ = indexOf(as, _) !== -1;
13
14 return function() {
15 var rest = slice(arguments);
16
17 // Don't waste time checking for placeholders if there aren't any.
18 var args = has_ ? take(as.length, function(i) {
19 var a = as[i];
20 return a === _ ? rest.shift() : a;
21 }) : as;
22
23 return f.apply(this, rest.length ? args.concat(rest) : args);
24 };
25 }
26
27 partial._ = _;
28
29 module.exports = partial;
30
31