On 7/4/23 12:58 AM, kiriakov wrote:
Hi. I can't handle template. It all looks sad, build ok, test error.
```
struct ParsResult(T) { T[] _in; T[] _out; }
struct Err(T) { T[] x; }
struct Result(T) {
SumType!(ParsResult!T, Err!T) data;
alias data this;
this(Value)(Value value) { data = value; }
}
Result!T applay(T)(Result!T function (T[]) pure fun, T[] x) pure {
return fun(x); }
ParsResult!char f (char[] x) pure { return ParsResult!char(x[1..$],
x[2..$]); }
unittest
{
writeln(applay(&f,"String10".dup));
}
```
I got
Error: none of the overloads of template `mexception.pars` are callable
using argument types `!()(ParsResult!char delegate(char[] x) pure
nothrow @nogc @safe, char[])`
source/mexception.d(64,10): Candidate is: `pars(T)(Result!T
function(T[]) pure fun, T[] x)`
If inference isn't working you can explicitly instantiate the template
to see why it isn't working.
After adding the necessary imports, I changed your unittest to:
```d
writeln(applay!char(&f,"String10".dup));
```
And I get the errors:
```
onlineapp.d(18): Error: function
`onlineapp.applay!char.applay(Result!char function(char[]) pure fun,
char[] x)` is not callable using argument types `(ParsResult!char
function(char[] x) pure, char[])`
onlineapp.d(18): cannot pass argument `& f` of type
`ParsResult!char function(char[] x) pure` to parameter `Result!char
function(char[]) pure fun`
```
It looks like a type mismatch. The function accepted should return
`Result` but it's returning `ParsResult`.
-Steve