On 7/4/23 11:15 AM, kiriakov wrote:
On Tuesday, 4 July 2023 at 14:42:31 UTC, Steven Schveighoffer wrote:
On 7/4/23 10:19 AM, kiriakov wrote:
On Tuesday, 4 July 2023 at 12:43:19 UTC, Steven Schveighoffer wrote:
On 7/4/23 12:58 AM, kiriakov wrote:

It looks like a type mismatch. The function accepted should return `Result` but it's returning `ParsResult`.

That's the problem

Result(T) = SumType!(ParsResult!T, Err!T)


No, `Result(T)` is its own struct in your example.
And also, `SumType!(ParsResult!T, Err!T)` is not the same as `ParsResult!T`. function pointers must match the return type.


I was recommended:
https://forum.dlang.org/thread/iblsgqqafagdgcsaf...@forum.dlang.org

```
struct Result(T) {
      SumType!(ParsResult!T, Err!T) data;
      alias data this;
      this(Value)(Value value) { data = value; }
}
```

You misunderstand, the function return type must match. If you want to accept a function pointer that returns Result, you must specify the function type as returning Result. It can't return something else, and still be the same type of function pointer.

D unfortunately does not obey covariance or contravariance with function pointer return types, but even if it did, in this case it would not work.

-Steve

Reply via email to