On 02/04/2016 10:38 AM, Atila Neves wrote:
On Wednesday, 3 February 2016 at 21:45:04 UTC, Timon Gehr wrote:
On 02/03/2016 09:12 PM, Atila Neves wrote:

https://github.com/D-Programming-Language/phobos/pull/3968

I think fold should be nothrow, but maybe that's just me. It's also a
massive pain to make it that way, so I didn't for now.

Returning Unqual!(ElementType!R).init makes no sense though.
The "correct" result of fold!f([]) is a (often, the) value 'a' such
that for any 'b', 'f(a,b)==b' (which is the canonical choice of
"seed"), but there is no way for fold to infer such a value.

Right. I wrote in a hurry and without checking the code I'd written
yesterday. The correct value to return for one function would be:

template fold(fun...) {
     alias binFuncs = staticMap!(binaryFun, fun);
     // checks for fun.length == 1, etc.
     auto fold(R)(R r) {
         return Unqual!(typeof(binFuncs[0](r.front, r.front))).init;
     }
}

My point was more that the .init value is often not the value you want.

Reply via email to