Chainable template mixin and opCat()

via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 1 04:20:50 PDT 2015


I just stumbled upon the following very interested idea:

http://forum.dlang.org/thread/bug-6043-3@http.d.puremagic.com%2Fissues%2F

1. Add the following (where?)

template Chainable() {
        Chain!(typeof(this), Range) opCat(Range)(Range r) {
            return chain(this, r);
        }
}

2. Then in the body of a lazy range both Phobos ones like map, 
filter, zip, iota, and so on, and user-defined ones, you may add:

mixin Chainable;

This allows to write more natural and readable code like:

     iota(5) ~ filter!q{a}([1,0,3])
     map!abs([1,2,-5]) ~ [10, 20]

instead of more noisy:

     chain(iota(5), filter!q{a}([1,0,3]))
     chain(map!abs([1,2,-5]), [10, 20])

See also bug 5638 for a useful optimization.

I'd be glad to work on Phobos PR for this :)


More information about the Digitalmars-d mailing list