imports and a data structure (any critique welcome)

Timon Gehr timon.gehr at gmx.ch
Thu Dec 26 18:15:57 PST 2013


On 12/27/2013 02:49 AM, bearophile wrote:
>
> In almost-theory D should allow code like:
>
>
> import std.stdio, std.typecons, std.variant;
>
> alias Term = Algebraic!(string, Tuple!(string, This[]));
>
> void main() {
>      const expr = Term(tuple("f", [Term(tuple("g", ["x".Term,
> "y".Term])), Term(tuple("a", [])), "x".Term]));
> }
>
>
> In practice std.variant module needs a This defined as "struct This {}",
> plus another improvement to support recursive types better, so that code
> doesn't work.
>
> That code also can't work because the second type of the "tuple("a",
> [])" literal is void[], so it's not compatible.
>
> I am not sure a good enough library-defined Algebraic type can be defined.

mixin ADT!q{ Term: Var char | Op char Term[] };

void main(){
     const expr = Op('f', [Op('g',[Var('x'), Var('y')]), Op('a',[]), 
Var('x')]);
}


More information about the Digitalmars-d-learn mailing list