Re:Zig-style generics are not well-suited for most languages
by valenterry on Sunday October 09, 2022 @11:50PM
(#33147579)
Can you template a template?
Re:Zig-style generics are not well-suited for most languages
by ben-schaaf on Sunday October 09, 2022 @11:59PM
(#33147633)
I believe so; see the entire meta package in the standard library: https://dlang.org/phobos/std_meta.html
Re:Zig-style generics are not well-suited for most languages
by valenterry on Monday October 10, 2022 @12:10AM
(#33147691)
Usually when something is called "meta" it means that it is special and does not compose.
I had someone explaining D templates to me on an Idris meetup, but it's been a few years, so I might very well be wrong here and not remember correctly. I'm happy to be corrected.
My next question would be: can I write those meta templates myself and modify them with themselves? In the same way that I could have a type-level function that applies another type-level function twice and then apply it on itself to get a new type-level function that applies another type-level function four times.
Re:Zig-style generics are not well-suited for most languages
by WalterBright on Monday October 10, 2022 @01:04AM
(#33147956)
Do you mean does recursion work? Absolutely!
Re:Zig-style generics are not well-suited for most languages
by valenterry on Monday October 10, 2022 @01:36AM
(#33148133)
I wasn't talking about recursion but composition. Can I write template A and then apply it to itself to get template B and then apply that onto template C to get template D.
Re:Zig-style generics are not well-suited for most languages
by WalterBright on Monday October 10, 2022 @02:07AM
(#33148301)
Yes.
Re:Zig-style generics are not well-suited for most languages
by valenterry on Monday October 10, 2022 @09:12PM
(#33158302)
I can't quite wrap my head around how that would work, but I'll trust you and then take my original claim back!
Re:Zig-style generics are not well-suited for most languages
by he_the_great on Saturday October 15, 2022 @12:02PM
(#33215937)
auto alist = [1, 3, 2];
alist .sort .map!(x => x * x) .map!(x => x - x/2) .map!(x => x + 1);
This seems like what you're asking. Each of those is a template. And while this is all logic code, D has inferred the type aka: SortedRange!Map!Map!Map
With some details removed.
Templates work even in betterC mode.