package amyc.ast

object Identifier:
  private val counter = new amyc.utils.UniqueCounter[String]

  def fresh(name: String): Identifier = new Identifier(name)

// Denotes a unique identifier in an Amy program
// Notice that we rely on reference equality to compare Identifiers.
// The numeric id will be generated lazily,
// so the Identifiers are numbered in order when we print the program.
final class Identifier private(val name: String):
  private lazy val id = Identifier.counter.next(name)

  def fullName = s"${name}_$id"

  override def toString: String = name
