"Andrei Alexandrescu" <[email protected]> wrote in message news:[email protected]... > On 06/07/2010 05:16 PM, Nick Sabalausky wrote: >> "Nick Sabalausky"<[email protected]> wrote in message >> news:[email protected]... >>> "Nick Sabalausky"<[email protected]> wrote in message >>> news:[email protected]... >>>> >>>> Assuming, of course, a 'max' that works on a range, which would be easy >>>> enough to do. Probably something like: >>>> >>> >>> ElementType!T max(T range) // Corrected >>> >>>> { >>>> return reduce!ordinaryMax(range); >>>> // Or >>>> return reduce!"a>b?a:b"(range); >>>> } >>>> >>> >> >> Or: >> >> alias reduce!"a>b?a:b" max; >> >> God, I love D :) > > 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. >
Template currying ;) Maybe not as flexible as typical currying, but still. Curry...dang, now I'm hungry... Also, what's Unqual?
