| [TOC](Readme.md) [Prev](unification.md) [Next](defaults.md) |
| |
| _Types ~~and~~ are Values_ |
| |
| # Disjunctions |
| |
| Disjunctions, or sum types, define a new type that is one of several things. |
| |
| In the example, `conn` defines a `protocol` field that must be one of two |
| values: `"tcp"` or `"udp"`. |
| It is an error for a concrete `conn` |
| to define anything else than these two values. |
| |
| <!-- CUE editor --> |
| ``` |
| conn: { |
| address: string |
| port: int |
| protocol: "tcp" | "udp" |
| } |
| |
| lossy: conn & { |
| address: "1.2.3.4" |
| port: 8888 |
| protocol: "udp" |
| } |
| ``` |