Re:Implementing a programming language in D: Lexical Analysis
by tomjakubowski on Monday December 28, 2015 @09:19PM
(#10804775)
Can you name the variants to distinguish two variants which "carry" the same types? It wouldn't be as useful if you can't express something like:
[ Parent
| on HN ]
Re:Implementing a programming language in D: Lexical Analysis
by jeremiep on Tuesday December 29, 2015 @12:46AM
(#10805434)
I would probably do it like this in D (disclaimer: I haven't tested this code!)
import std.typecons;
import std.socket;
import std.variant;
struct Disconnected {}
struct Connecting {}
alias Connected = Typedef!(TcpSocket, null, "connected");
alias Transferring = Typedef!(TcpSocket, null, "transferring");
alias ConnState = Algebraic!(Disconnected, Connecting, Connected, Transferring);
You could use plain structs instead of the typedef template for the same result.
Re:Implementing a programming language in D: Lexical Analysis
by p0nce on Tuesday December 29, 2015 @06:45AM
(#10806251)
I see what you mean.
You can create such new types with std.typecons.Typedef https://dlang.org/phobos/std_typecons.html#.Typedef
Though it's less pretty.