Dejan Lekic:

Dear D community, I do not know about You, but I certainly do not like writing code like:

inRange.fooRange(param).barRange.
  .bazRange(param1, param2).outRange;

I suggest to format it this way, it's more readable:

auto something = inRange
                 .fooRange(param)
                 .barRange()
                 .bazRange(param1, param2)
                 .outRange();


Therefore I would like to know what do you think about the idea of having additional operator exclusively made for ranges? This operator would make it obvious that data are "streamed" (lack of better term) among ranges.

The first name I could come up with was "opArrow" but "opData" could also be okay, and operator would be either "~>" or "->".

This would give us an obvious, unambiguous statement:

Console.in ~> filter1(param) ~> fooRange ~> Console.out;
// Console is an imaginary class/struct

I think it doesn't give a significant improvement. But maybe
there are more interesting use cases.

I'd like D ranges to support the "~" (using a template mixin to
give them such operator), that acts like chain. So instead of
writing:

range1.chain(range2)

You write:

range1 ~ range2

It's also nice to have lazy lists, maybe based on fibers, with
few operators to concat them, etc.

Bye,
bearophile

Reply via email to