///|
pub(all) type Cursor Int derive(Compare, Eq, Default)

///|
pub impl Hash for Cursor with hash_combine(self, hasher) {
  hasher.combine_int(self.inner())
}

///|
pub impl Hash for Cursor with hash(self) {
  self.inner()
}

///|
pub impl ToInt for Cursor with to_int(self) {
  self.inner()
}

// ///|
// pub impl Eq for Cursor with op_equal(a, b) {
//   a._ == b._
// }

///|
pub impl Show for Cursor with output(a, logger) {
  logger.write_object(a.inner())
}

///|
pub impl ToJson for Cursor with to_json(a) {
  Json::number(a.inner() |> Int::to_double)
}

///|
pub fn Cursor::op_add(a : Cursor, b : Cursor) -> Cursor {
  a.inner() + b.inner()
}