| var _curry2 = |
| /*#__PURE__*/ |
| require("./internal/_curry2"); |
| |
| var curry = |
| /*#__PURE__*/ |
| require("./curry"); |
| |
| var nAry = |
| /*#__PURE__*/ |
| require("./nAry"); |
| /** |
| * Wraps a constructor function inside a curried function that can be called |
| * with the same arguments and returns the same type. The arity of the function |
| * returned is specified to allow using variadic constructor functions. |
| * |
| * @func |
| * @memberOf R |
| * @since v0.4.0 |
| * @category Function |
| * @sig Number -> (* -> {*}) -> (* -> {*}) |
| * @param {Number} n The arity of the constructor function. |
| * @param {Function} Fn The constructor function to wrap. |
| * @return {Function} A wrapped, curried constructor function. |
| * @example |
| * |
| * // Variadic Constructor function |
| * function Salad() { |
| * this.ingredients = arguments; |
| * } |
| * |
| * Salad.prototype.recipe = function() { |
| * const instructions = R.map(ingredient => 'Add a dollop of ' + ingredient, this.ingredients); |
| * return R.join('\n', instructions); |
| * }; |
| * |
| * const ThreeLayerSalad = R.constructN(3, Salad); |
| * |
| * // Notice we no longer need the 'new' keyword, and the constructor is curried for 3 arguments. |
| * const salad = ThreeLayerSalad('Mayonnaise')('Potato Chips')('Ketchup'); |
| * |
| * console.log(salad.recipe()); |
| * // Add a dollop of Mayonnaise |
| * // Add a dollop of Potato Chips |
| * // Add a dollop of Ketchup |
| */ |
| |
| |
| var constructN = |
| /*#__PURE__*/ |
| _curry2(function constructN(n, Fn) { |
| if (n > 10) { |
| throw new Error('Constructor with greater than ten arguments'); |
| } |
| |
| if (n === 0) { |
| return function () { |
| return new Fn(); |
| }; |
| } |
| |
| return curry(nAry(n, function ($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) { |
| switch (arguments.length) { |
| case 1: |
| return new Fn($0); |
| |
| case 2: |
| return new Fn($0, $1); |
| |
| case 3: |
| return new Fn($0, $1, $2); |
| |
| case 4: |
| return new Fn($0, $1, $2, $3); |
| |
| case 5: |
| return new Fn($0, $1, $2, $3, $4); |
| |
| case 6: |
| return new Fn($0, $1, $2, $3, $4, $5); |
| |
| case 7: |
| return new Fn($0, $1, $2, $3, $4, $5, $6); |
| |
| case 8: |
| return new Fn($0, $1, $2, $3, $4, $5, $6, $7); |
| |
| case 9: |
| return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8); |
| |
| case 10: |
| return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8, $9); |
| } |
| })); |
| }); |
| |
| module.exports = constructN; |