JSFiddle - React, Tailwind, and code Playground

JavaScript

const curry = (fn) => {
  const args = []
  const f = function(arg) {
  if (!arguments.length) {
  		return args.reduce((acc, arg) => {
    if (typeof arg !== 'number') {
      window.open('https://www.youtube.com/watch?v=_VxQrbNPxO4')
      throw Error('?!')
    }
    return fn.call(fn, acc, arg)
  }, 0)
  
		}
    args.push(arg) 
    return f
	}
  return f
}

const sum = curry((x, y) => x + y)


console.log(sum(4)(4)(2)(1)(5)(4)()) // последний вызов без аргументов активизирует цепочку вызовов