Ivan Čukić

Curry with a lot of (syntax) sugar in C++11 (finished)

I know I’m getting boring with currying, but I have finished most of what I originally wanted. And I am publishing the code this time. It is published under GPL.

Now, a curried function can be invoked with a single call, like a regular function; in two calls; or in as many calls as you wish – the only limit is the actual number of arguments. So, all of the following works:

  f(1, 2, 3, 4, 5, 6)
  f(1, 2, 3, 4, 5)(6)
  f(1, 2, 3, 4)(5)(6)
  f(1, 2)(3)(4)(5, 6)
  f(1)(2)(3)(4)(5)(6)

On reddit, a very nice explanation of currying by m42a contained this piece of code:

  template <class Func>
  auto partially_apply_to_2(Func f)
  {
      return uncurry(curry(f)(2));
  }

It returns a new function that is same as f, but with the first argument set to 2. (see the post why this is more practical than std::bind). With the new version of curry.h, you don’t even need to uncurry the function, you can just do this:

  return curry(f)(2);
  // or:
  return curry(f, c);

Here are a few documented examples of what you can do:

curry/main.cpp

And here is the header file: curry/curry.h

Loading comments...