33 lines
500 B
Plaintext
33 lines
500 B
Plaintext
### Variants
|
|
|
|
[
|
|
Datatype variants
|
|
Funcon variant
|
|
Funcon variant-id
|
|
Funcon variant-value
|
|
]
|
|
|
|
|
|
Meta-variables
|
|
T <: values
|
|
|
|
|
|
Datatype
|
|
variants(T) ::= variant(_:identifiers, _:T)
|
|
/*
|
|
A value of type `variants(T)` is a pair formed from an identifier and
|
|
a value of type `T`.
|
|
*/
|
|
|
|
|
|
Funcon
|
|
variant-id(_:variants(T)) : =>identifiers
|
|
Rule
|
|
variant-id(variant(I:identifiers, _:T)) ~> I
|
|
|
|
|
|
Funcon
|
|
variant-value(_:variants(T)) : =>T
|
|
Rule
|
|
variant-value(variant(_:identifiers, V:T)) ~> V
|