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

Reply via email to