===
structural type
===
structural type Optional a = Some a | None
---
(unison
    (type_declaration
        (structural_kw)
        (type_kw)
        (type_constructor (type_name (wordy_id)) (type_argument))
        (kw_equals)
        (wordy_id)
        (wordy_id)
        (pipe)
        (wordy_id)))
===
unique type
===
unique type UserId = Phone Nat | Email Text
---
(unison
    (type_declaration
        (unique_kw)
        (type_kw)
        (type_constructor (type_name (wordy_id)))
        (kw_equals)
        (wordy_id)
        (wordy_id)
        (pipe)
        (wordy_id)
        (wordy_id)))
===
type tag (no type constructor)
===
unique type Foo =
---
(unison
    (type_declaration
        (unique_kw)
        (type_kw)
        (type_constructor (type_name (wordy_id)))
        (kw_equals)))
===
type name with namespace/qualifier
===
unique type controlFlow.Color = RGB Nat Nat Nat
---
(unison
    (type_declaration
        (unique_kw)
        (type_kw)
        (type_constructor
            (type_name (path) (wordy_id)))
        (kw_equals)
        (wordy_id)
        (wordy_id)
        (wordy_id)
        (wordy_id)))
===
Record type, single line
===
unique type Point2 = { x : Nat, y : Nat }
---
(unison
    (type_declaration
        (unique_kw)
        (type_kw)
        (type_constructor
            (type_name
                (wordy_id)))
        (kw_equals)
        (record
            (record_field
                (wordy_id)
                (wordy_id))
            (record_field
                (wordy_id)
                (wordy_id)))))
===
Record type, multiline
===
unique type Point2 = {
    x : Nat,
    y : Nat,
}
---
(unison
    (type_declaration
        (unique_kw)
        (type_kw)
        (type_constructor
            (type_name
                (wordy_id)))
        (kw_equals)
        (record
            (record_field
                (wordy_id)
                (wordy_id))
            (record_field
                (wordy_id)
                (wordy_id)))))