On Thursday, 21 April 2022 at 21:38:14 UTC, Ali Çehreli wrote:
```d auto myMap(alias f, R)(R r) { pragma(msg, typeof(f)); return MapResult!(R, f)(r); } ```
It looks delicious when the convenience function works magic with Voldemort:
```d import std.range, std.stdio; auto myMap(alias f, R)(R r) { struct Map { auto empty() { return r.empty; } auto front() { return f(r.front); } void popFront() { r.popFront; } } return Map(); } void main() { // with convenience function: alias func = (int x) => 2 * x; auto range = 1.iota(11); range.myMap!func.writeln; range.myMap!(x => 2 * x).writeln; // with only struct: struct MapResult(alias range, alias f) { auto empty() { return range.empty; } auto front() { return f(range.front); } void popFront() { range.popFront; } } MapResult!(range, func) mp; foreach(result; mp) result.writeln; } /* OUTPUT: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] 2 4 6 8 10 12 14 16 18 20 */ ``` SDB@79