///|
pub fn merge_documents(
  left : VcfDocument,
  right : VcfDocument,
) -> VcfDocument raise ParseError {
  guard left.header == right.header else {
    raise ParseError::InvalidHeader(
      line=0,
      column=1,
      message="cannot merge VCF documents with incompatible headers",
    )
  }
  let records : Array[VcfRecord] = []
  for record in left.records {
    records.push(record)
  }
  for record in right.records {
    let key = record_key(record)
    if !contains_record_key(records, key) {
      records.push(record)
    }
  }
  { header: left.header, records }
}

///|
fn contains_record_key(records : Array[VcfRecord], wanted : String) -> Bool {
  for record in records {
    if record_key(record) == wanted {
      return true
    }
  }
  false
}