///|
#derive(Eq, Debug)
pub(all) enum Access {
  Public
  Private
}

///|
#derive(Eq, Debug)
pub(all) struct AccessControlled[T] {
  access : Access
  value : T
}

///|
#derive(Eq, Debug)
pub(all) struct Documented[T] {
  doc : String?
  value : T
}

///|
/// JSON-shaped extension data. Number lexemes never pass through a floating-point value.
/// This is a data model, not a parser; codecs must validate number lexemes.
#derive(Eq, Debug)
pub(all) enum Data {
  Null
  Boolean(Bool)
  Number(String)
  Text(String)
  Array(Array[Data])
  Object(Map[String, Data])
}