Timon Gehr: > It is especially compact in that program,
The coding style of that program is an unreadable mess, example: LList!T hamming(T)(){ LList!T merge(LList!T xs, LList!T ys){ return lz({ auto x=xs.head, y=ys.head; if(x()<y()) return cons(x,merge(xs.tail,ys))(); else if(x()>y()) return cons(y,merge(xs,ys.tail))(); else return cons(x,merge(xs.tail,ys.tail))(); }); } return lz({ LList!T r; r=cons(st(1),lz({return merge(merge(map((Lazy!T a){return lz({return 2*a();});},r),map((Lazy!T a){return lz({return 3*a();});},r)),map((Lazy!T a){return lz({return 5*a();});},r))();})); return r(); }); } This is a bit better: LList!T hamming(T)() { static LList!T merge(LList!T xs, LList!T ys) { return lz({ auto x = xs.head; auto y = ys.head; if (x() < y()) return cons(x, merge(xs.tail, ys))(); else if (x() > y()) return cons(y, merge(xs, ys.tail))(); else return cons(x, merge(xs.tail, ys.tail))(); }); } return lz({ LList!T r; r = cons(st(BigInt(1)), lz({ return merge(merge(map((Lazy!T a){ return lz({ return 2 * a(); }); }, r), map((Lazy!T a){ return lz({ return 3 * a(); }); }, r)), map((Lazy!T a){ return lz({ return 5 * a(); }); }, r))(); })); return r(); }); } > I am starting to think this is not as intended. I think it's a DMD bug. Fit for Bugzilla. > I cannot seem to find it, but I'd like to vote on it. Do you have a link? I have updated this: http://d.puremagic.com/issues/show_bug.cgi?id=5970 Bye, bearophile