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