You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
// Generated by LiveScript 1.4.0 |
|
var apply, curry, flip, fix, over, memoize, slice$ = [].slice, toString$ = {}.toString; |
|
apply = curry$(function(f, list){ |
|
return f.apply(null, list); |
|
}); |
|
curry = function(f){ |
|
return curry$(f); |
|
}; |
|
flip = curry$(function(f, x, y){ |
|
return f(y, x); |
|
}); |
|
fix = function(f){ |
|
return function(g){ |
|
return function(){ |
|
return f(g(g)).apply(null, arguments); |
|
}; |
|
}(function(g){ |
|
return function(){ |
|
return f(g(g)).apply(null, arguments); |
|
}; |
|
}); |
|
}; |
|
over = curry$(function(f, g, x, y){ |
|
return f(g(x), g(y)); |
|
}); |
|
memoize = function(f){ |
|
var memo; |
|
memo = {}; |
|
return function(){ |
|
var args, key, arg; |
|
args = slice$.call(arguments); |
|
key = (function(){ |
|
var i$, ref$, len$, results$ = []; |
|
for (i$ = 0, len$ = (ref$ = args).length; i$ < len$; ++i$) { |
|
arg = ref$[i$]; |
|
results$.push(arg + toString$.call(arg).slice(8, -1)); |
|
} |
|
return results$; |
|
}()).join(''); |
|
return memo[key] = key in memo |
|
? memo[key] |
|
: f.apply(null, args); |
|
}; |
|
}; |
|
module.exports = { |
|
curry: curry, |
|
flip: flip, |
|
fix: fix, |
|
apply: apply, |
|
over: over, |
|
memoize: memoize |
|
}; |
|
function curry$(f, bound){ |
|
var context, |
|
_curry = function(args) { |
|
return f.length > 1 ? function(){ |
|
var params = args ? args.concat() : []; |
|
context = bound ? context || this : this; |
|
return params.push.apply(params, arguments) < |
|
f.length && arguments.length ? |
|
_curry.call(context, params) : f.apply(context, params); |
|
} : f; |
|
}; |
|
return _curry(); |
|
} |