Func.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Generated by LiveScript 1.6.0
  2. var apply, curry, flip, fix, over, memoize, toString$ = {}.toString;
  3. apply = curry$(function(f, list){
  4. return f.apply(null, list);
  5. });
  6. curry = function(f){
  7. return curry$(f);
  8. };
  9. flip = curry$(function(f, x, y){
  10. return f(y, x);
  11. });
  12. fix = function(f){
  13. return function(g){
  14. return function(){
  15. return f(g(g)).apply(null, arguments);
  16. };
  17. }(function(g){
  18. return function(){
  19. return f(g(g)).apply(null, arguments);
  20. };
  21. });
  22. };
  23. over = curry$(function(f, g, x, y){
  24. return f(g(x), g(y));
  25. });
  26. memoize = function(f){
  27. var memo;
  28. memo = {};
  29. return function(){
  30. var args, res$, i$, to$, key, arg;
  31. res$ = [];
  32. for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
  33. res$.push(arguments[i$]);
  34. }
  35. args = res$;
  36. key = (function(){
  37. var i$, ref$, len$, results$ = [];
  38. for (i$ = 0, len$ = (ref$ = args).length; i$ < len$; ++i$) {
  39. arg = ref$[i$];
  40. results$.push(arg + toString$.call(arg).slice(8, -1));
  41. }
  42. return results$;
  43. }()).join('');
  44. return memo[key] = key in memo
  45. ? memo[key]
  46. : f.apply(null, args);
  47. };
  48. };
  49. module.exports = {
  50. curry: curry,
  51. flip: flip,
  52. fix: fix,
  53. apply: apply,
  54. over: over,
  55. memoize: memoize
  56. };
  57. function curry$(f, bound){
  58. var context,
  59. _curry = function(args) {
  60. return f.length > 1 ? function(){
  61. var params = args ? args.concat() : [];
  62. context = bound ? context || this : this;
  63. return params.push.apply(params, arguments) <
  64. f.length && arguments.length ?
  65. _curry.call(context, params) : f.apply(context, params);
  66. } : f;
  67. };
  68. return _curry();
  69. }