///|
pub impl[A : Format, B : Format] Format for Iter2[A, B] with write(
  value,
  buffer,
  start,
) {
  let mut offset = start
  offset += Format::write(b'[', buffer, offset)
  for x, y in value {
    offset += Format::write(b'(', buffer, offset)
    offset += Format::write(x, buffer, offset)
    offset += Format::write(b',', buffer, offset)
    offset += Format::write(y, buffer, offset)
    offset += Format::write(b')', buffer, offset)
    // delimiter for pairs
    offset += Format::write(b',', buffer, offset)
  }
  // overwrite last ',' with ']'
  buffer[offset - 1] = b']'
  offset - start
}

///|
/// supremum
pub impl[A : Format, B : Format] Format for Iter2[A, B] with count(self) -> Int {
  let mut supremum = 1 // for '['
  for x, y in self {
    // 4 for '(', ',', ')', ','
    supremum += 4 + x.count() + y.count()
  }
  // overwrite last ',' with ']'
  supremum
}