Tagged union
Uniontype met een expliciet ‘tag’-veld dat aangeeft welke variant actief is. De union uit C/C++ is ongetagd (ruw gedeeld geheugen, foutgevoelig); een tagged union draagt typeinformatie die de compiler kan controleren.
TypeScript kent de discriminated union: type Result = { kind: 'ok'; value: number } | { kind: 'err'; error: string }. De compiler vernauwt het type via een switch op kind. Een Rust-enum is formeel een tagged union, met een impliciete discriminant per variant. In C++ doen std::variant en std::visit hetzelfde werk. Klassieke toepassingen: API-responses, toestandsmachines en AST-knopen in parsers. Moderne typesystemen maken tagged unions veilig; de oude C-union is gevaarlijk, omdat je het verkeerde veld kunt lezen en dan in ongedefinieerd gedrag belandt.