### Records

[
  Datatype records
  Funcon   record
  Funcon   record-map
  Funcon   record-select
]


Meta-variables
  T <: values


Datatype
  records(T) ::= record(_:maps(identifiers,T))
/*
  A value of type `records(T)` contains a map from identifiers to values of
  type `T`.
*/


Funcon
  record-map(_:records(T)) : =>maps(identifiers,T)
Rule
  record-map(record(M:maps(_,_))) ~> M


Funcon  record-select(R:records(T), I:identifiers) : =>T?
   ~> map-lookup(record-map(R), I)