Partial function application (Currying)

atzensepp webwicht at web.de
Sat Jan 20 20:55:21 UTC 2024


On Saturday, 20 January 2024 at 17:47:29 UTC, Richard (Rikki) 
Andrew Cattermole wrote:
> Not really any other way to do it, create context (i.e. struct, 
> or stack) and have a delegate point to both it and a patch 
> function.
>
> It'll be how partial is implemented.
>
> https://dlang.org/phobos/std_functional.html#.partial

Hi Rikki,
thanks for the link to partial. I tried this:

```d

     import std.stdio;

     // Overloads are resolved when the partially applied function 
is called
     // with the remaining arguments.
     struct S
     {
     static char fun(int i, string s) { return s[i]; }
      static int fun(int a, int b) { return a * b; }
     }
     void main()
      {
       alias fun3 = partial!(S.fun, 3);
       writeln(fun3("hello")); // 'l'
       writeln(fun3(10)); // 30
     }



```
But getting:

```
     partial.d:12:14: error: template instance partial!(S.fun, 3) 
partial is not a template    declaration, it is a module
  alias fun3 = partial!(S.fun, 3);
```



More information about the Digitalmars-d-learn mailing list