First Draft: Nominal Sum Types via `enum union` and `switch` Expressions
Meta
jared771 at gmail.com
Sat Oct 24 17:13:09 UTC 2026
On Saturday, 24 October 2026 at 07:59:13 UTC, Kapendev wrote:
> On Monday, 14 September 2026 at 06:35:13 UTC, Meta wrote:
>> ```d
>> enum union NetworkPacket
>> {
>> case Data(const(ubyte)[]),
>> case Ping(ulong),
>> case Reset(ushort),
>> case Heartbeat(),
>> case EndOfStream(),
>> }
>> ```
>> ```d
>> enum union ConfigValue
>> {
>> bool,
>> long,
>> double,
>> string,
>> string[],
>> }
>> ```
>
> Looks pretty good!
> I didn't know how to feel about the commas, but they make sense
> if you are going to define structs inside the enum union
I changed it to semicolons. That's going into v2 of the DIP.
> The main reasons I see making this part of the language is the
> first example above, the switch syntax, and it's a type that
> you often see in projects (like slices).
>
> This DIP also tries to make a lot of different people happy.
> For example, I usually use sumtypes like the second enum union.
> Someone that is more familiar with languages like Rust probably
> prefers the first enum union. Both options exists and everyone
> has what they want.
💯
More information about the dip.development
mailing list