///|
let global_id_count : Ref[Int] = Ref(0)

///|
struct Id(Int) derive(Eq, Hash, Compare)

///|
pub impl Show for Id with fn output(self, buf) {
  Show::output(self.0, buf)
}

///|
fn next_id() -> Int {
  let id = global_id_count.val
  global_id_count.val += 1
  id
}

///|
#doc(hidden)
pub fn Id::new(_ : @key.Key) -> Id {
  next_id()
}

///|
struct InstId(Int) derive(Eq, Hash)

///|
#doc(hidden)
pub fn InstId::new(_ : @key.Key) -> InstId {
  next_id()
}