Skip to content

Instantly share code, notes, and snippets.

@HerringtonDarkholme
Last active August 29, 2015 13:57
Show Gist options
  • Save HerringtonDarkholme/9480323 to your computer and use it in GitHub Desktop.
Save HerringtonDarkholme/9480323 to your computer and use it in GitHub Desktop.
// bad
function Curry(fn) {
var args = Array.prototype.slice.call(arguments, 1);
var len = fn.length - args.length;
var partial = function () {
var partialArg = Array.prototype.slice.call(arguments);
args = args.concat(partialArg);
if (args.length > len) {
throw new Error('wrong argument lenth: Expected ' + len + '; Receive ' + args.length);
}
if (args.length === len) {
return fn.apply(this, args);
}
return partial;
}
return partial();
}
// good
function Curry(fn) {
var args = Array.prototype.slice.call(arguments, 1);
var len = fn.length;
function _curry(len, args, fn) {
if (len < args.length)
throw new Error('wrong argument lenth: Expected ' + len + '; Receive ' + args.length);
if (len === args.length)
return fn.apply(this, args);
return function() {
return _curry(len,
args.concat(Array.prototype.slice.call(arguments)),
fn);
};
}
return _curry(len, args, fn);
}
// pointless^H^H^H^Hfree
function Curry(fn) {
function curried(args) {
if (fn.length <= args.length)
return fn.apply(this, args);
return function() {
return curried(
args.concat(Array.prototype.slice.call(arguments))
);
};
}
return curried(Array.prototype.slice.call(arguments, 1));
}
// true pointless
function Curry(fn, ...args) {
return (function curried(args) {
if (fn.length <= args.length) {
return fn.apply(this, args);
}
return (...newArg) => curried(args.contact(newArg))
})(args)
}
@HerringtonDarkholme
Copy link
Author

Failed because side effect in args

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment