code: function curry (fn, ...args) {
    if (args.length >= fn.length) {
      return fn.apply(null, args)
    } else {
      return function (...rest) {
        return curry(fn, ...args, ...rest)
      }
    }
  }
docs: The All Mighty Curry!
  Any extra arguments are to be handled by the curried function.
  
  Note: Default and Rest parameters are not accounted for in Function#length.
  So the curried function will be called as soon as it has recieved all regular
  parameters. To utilize Rest parameters use curryN
  
  By the way, the spread operator is so cool!