Implementing Haskell's Type-Level Quicksort in D

Meta jared771 at gmail.com
Thu Feb 13 18:54:17 PST 2014


On Friday, 14 February 2014 at 02:41:12 UTC, bearophile wrote:
> Meta:
>
>> alias list1 = Cons!(Three, Cons!(Two, Cons!(Four, Cons!(One, 
>> Nil))));
>>
>> alias numlHead(L: Cons!(a, b), a, b) = a;
>>
>> alias numlTail(L: Cons!(a, b), a, b) = b;
>>
>>
>> But the compiler is complaining loudly about a mismatch:
>>
>> /d43/f234.d(39): Error: template instance numlHead!(list1) 
>> does not match template declaration numlHead(L : Cons!(a, b), 
>> a, b)
>
> See a recent thread of mine:
> http://forum.dlang.org/thread/vlwgufdlpjgewpnnhkma@forum.dlang.org
>
> Currently I think you have to accept types and aliases with a 
> regular template syntax, and verify the types and kinds with 
> template constraints. Something like (untested):
>
> template numlTail(C) if (TemplateOf!(C, Cons)) {
>     alias numlTail = TemplateArgsOf!(C)[1];
> }
>
> Bye,
> bearophile

It seems strange that it would choke now, as Cons is a struct. 
Therefore, Cons!(Three, ...) should create a new type, and `L: 
Cons!(a, b), a, b` shouldn't be any trouble to destructure into 
two types, `Three` and `Cons!(Two, ...)`. It had no problem 
handling the Succ and Number struct templates I defined.


More information about the Digitalmars-d-learn mailing list