<div class="gmail_quote">On Tue, Jun 8, 2010 at 14:28, Andrei Alexandrescu <span dir="ltr">&lt;<a href="mailto:SeeWebsiteForEmail@erdani.org">SeeWebsiteForEmail@erdani.org</a>&gt;</span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

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