Row
A set of tags — the ingredient of a variant, at kind Row. Wrap it in [ … ] to get an open variant type: [> :a | :b ] (open / lower bound), [ :a | :b ] (exact), [< :a | :b ] (upper bound).
| Channel | Spelling | Row variable in app code? | ||
|---|---|---|---|---|
| Value | `[ :a \ | :b ],[ 'r \ | :c ],[> :a ]` | yes — open 'r ⇒ open-variant Type (open-binder); kind-Row 'r fills [ … ] |
| Exceptions | `exn [ :smtp(E) \ | … ]` | yes — structural exception row | |
| Effects | `eff [ Email \ | Postgres ]` | yes at explicit transformation boundaries |
In the value channel it is a variant row; in the exception channel an exception row (error-row.md). Same shape, different channel.
A row variable
'rranges over rows (kindRow).The
effchannel carries effect labels and admits explicit row algebra at bounded transformation boundaries — see effect-row.md.Rows are not the default way to model fixed domains. Use closed variants for ordinary nominal choices; use rows when structural composition is required.
See variant.md, row-extension.md, and error-row.md.