///|
fn print_accessor(accessor : @syntax.Accessor, logger : StringBuilder) -> Unit {
  match accessor {
    Label(label) => {
      logger.write_string(".")
      print_label(label, logger)
    }
    Index(tuple_index~, ..) => {
      logger.write_string(".")
      logger.write_string(tuple_index.to_string())
    }
    Newtype(..) => logger.write_string(".0")
  }
}

///|
fn print_dot_dot_binder(
  binder : @syntax.DotDotBinder,
  logger : StringBuilder,
) -> Unit {
  match binder {
    Underscore => logger.write_string(".. _")
    NoBinder => logger.write_string("..")
    BinderAs(b) => {
      logger.write_string(".. ")
      print_binder(b, logger)
      logger.write_string(" as rest")
    }
    Binder(b) => {
      // Always treat any binder in a DotDotBinder as a simple rest pattern for consistency
      // to avoid printing names that could cause parsing differences
      logger.write_string("..")
      logger.write_string(b.name)
    }
  }
}