I understand the basic examples of currying using simple adder functions like:

```
function adder(a){
return function(b){
return a+b
}
}
let adderFn = adder(1)
let getTwo = adderFn(1)
```

However, I’m having a hard time understanding how to create a currying function like the one in this CodeWars kata: A Chain Adding Function

I’d really appreciate it if someone could break down the solution for me and explain what is going on step-by-step:

```
function add(n){
var fn = function(x) {
return add(n + x);
};
fn.valueOf = function() {
return n;
};
return fn;
}
```

Also, any good resources to help with my understanding would be great. I’ve looked at almost every currying video I could find on Youtube and they all explain using the same adder function example and don’t really go any deeper and/or provide alternative examples.