Kind
A kind is the "sort" of a type-level thing — what classifies a type the way a type classifies a value.
| Kind | Classifies | Members | |
|---|---|---|---|
| Type | the type of a value | Int, User, `[ :a \ | :b ],fn() -> Unit` |
| Row | a structural channel fragment | `:a \ | :b, the row variable'r` |
| Signature | a complete function descriptor | a sig 'f binder | |
Constructor (Type -> Type, …) | a type still needing arguments | Vector, Option, Map |
An ordinary type variable
'ahas kindType(the zero-ceremony default).A row variable
'rhas kindRow; it can never unify with aType.Keep kind (what sort a variable is) separate from constraint (what it can do, e.g. an inline
'a: Orderedfunction binder).A row is at kind
Row; wrapping it in[ … ]produces a kind-Typeopen variant.open 'ron a binder constrains'rto instantiate to an open-variantType(not that'rhas kindRowin the binder list) — see open-binder.md. The same open shape can be inferred from an open-only use such asTimed('r).Ordinary relative callbacks need no explicit effect variable. APIs that deliberately transform channels may bind rows or a complete
sigexplicitly; see effect-row.md and ../10-services.md.See variant.md and ../02-type-inference.md.