On Thursday, 1 January 2026 at 19:06:44 UTC, monkyyy wrote:
On Thursday, 1 January 2026 at 17:01:25 UTC, zhade wrote:
Is this the supposed way to do it?
The api was not written to be introspective and d's type theory
has holes in it
Given a clean slate and modern knowledge and a design goal of
allowing introsection I would expect `return
typeof(return).init;` to work. Youd have to be writting your
own algorthims lib tho.
If your lamda was an alias and you knew the range was empty on
init you should be able to get this sort of thing working:
```d
alias F=...;
if(cond1){
return r.map!F;
} else {
return typeof(r).init.map!F;
}
```
but your off the garden path and your likely learn some new
compiler bugs :D
Thank you, I tried this (not quite as a lib but inlined) and it
works. If I were to extract it further I believe I would still
ultimately come to the solution I currently have which is a
separate function for the map and filtering.
```d
auto example_func(bool fail)
{
alias filterFunc = a => a != "expensive";
alias mapFunc = a => tuple!("value", "numLetters")(a,
a.length);
if (fail)
{
return string[].init
.filter!filterFunc
.map!mapFunc;
}
auto list = someExpensiveOperation();
return list
.filter!filterFunc
.map!mapFunc;
}
```