On Tue, Jun 8, 2010 at 14:28, Andrei Alexandrescu <SeeWebsiteForEmail@erdani.org> wrote:
This is kind of funny. This works because reduce is defined as follows:
template reduce(alias fun)
{
alias Reduce!(fun).reduce reduce;
}
I did that to work around some old compiler bugs that have been since fixed. I'd initially intended to define reduce like this:
Unqual!E reduce(alias fun, E, R)(E seed, R r) { ... }
but that wouldn't have allowed Nick's alias, which is quite useful. So it looks like we have a cool idiom.
Currying in general is always handy to have. The possibility to say
alias map!fun funMapper;
would be cool also. If possible, having this in Phobos would be quite nice.
Bu then, I'm one of those persons that'd like to have
alias take(3) takeThree; // will then work on any range.
Instead of take(range, 3). If find the former to be much more generic.
I liked it so much I defined a small template to invert and curry these (R,n) functions.
Philippe