{"ScriptPreparationCode":"function curry1 (f, a = []) {\r\n return (...p) =\u003E (o =\u003E o.length \u003E= f.length ? f(...o) : curry1(f, o))([ ...a, ...p ])\r\n}\t\r\n\r\nfunction curry2(_fn) {\r\n if (_fn.length === 0) {\r\n return _fn;\r\n }\r\n const accumArgs = new Array(_fn.length);\r\n\r\n return nest(_fn, 1, accumArgs);\r\n}\r\n\r\nfunction nest(_fn, _argN, _accumArgs) {\r\n return (..._args) =\u003E {\r\n let localArgN = _argN - 1;\r\n for (let i=0; i\u003C_args.length; i\u002B\u002B) {\r\n _accumArgs[localArgN] = _args[i];\r\n localArgN \u002B\u002B;\r\n if (localArgN === _fn.length) {\r\n return _fn(..._accumArgs);\r\n }\r\n }\r\n return nest(_fn, localArgN\u002B1, _accumArgs);\r\n };\r\n}\r\n\r\nfunction foo (a,b,c,d,e,f) {\r\n\treturn a \u002B b \u002B c \u002B d \u002B e \u002B f; \r\n}\r\n","TestCases":[{"Name":"max curry loop args","Code":"curry2(foo)(1)(2)(3)(4)(5)(6)","IsDeferred":false},{"Name":"max curry recursive args","Code":"curry1(foo)(1)(2)(3)(4)(5)(6)","IsDeferred":false},{"Name":"curry loop min args","Code":"curry2(foo)(1, 2, 3, 4, 5, 6)","IsDeferred":false},{"Name":"curry recursive min args","Code":"curry1(foo)(1, 2, 3, 4, 5, 6)","IsDeferred":false}]}