Wrap and unwrap a value with the same type parameter.

type-parameter The `[A]` type parameter lets one definition work with many types. Here `Identity[A]` stores and returns a value without changing its type.

Generic Identity Wrapper

number
IdentityGeneric.scala
Replay: real traced execution (multi-file project)
case class Identity[A](value: A)

object Main {
  def main(args: Array[String]): Unit = {
    val number = 7
    val wrapped = Identity[Int](number)
    val kept = wrapped.value
    val label = "kept=" + kept

    println("number=" + number)
    println(label)
  }
}
case class Identity[A](value: A)

object Main {
  def main(args: Array[String]): Unit = {
    val number = 3
    val wrapped = Identity[Int](number)
    val kept = wrapped.value
    val label = "kept=" + kept

    println("number=" + number)
    println(label)
  }
}
case class Identity[A](value: A)

object Main {
  def main(args: Array[String]): Unit = {
    val number = 12
    val wrapped = Identity[Int](number)
    val kept = wrapped.value
    val label = "kept=" + kept

    println("number=" + number)
    println(label)
  }
}
  1. number ← 7, wrapped ← Identity(7), kept ← 7, wrapped.value ← 7

    3object Main {4  def main(args: Array[String]): Unit = {5    val number→ 7 = 7 //@number=3, 126    val wrapped→ Identity(7) = Identity[Int](number7)7    val kept→ 7 = wrapped.value→ 78    val label→ kept=7 = "kept=" + kept7910    println("number=" + number7)11    println(labelkept=7)12  }13}
    outputnumber=7
    kept=7
  1. number ← 3, wrapped ← Identity(3), kept ← 3, wrapped.value ← 3

    3object Main {4  def main(args: Array[String]): Unit = {5    val number→ 3 = 36    val wrapped→ Identity(3) = Identity[Int](number3)7    val kept→ 3 = wrapped.value→ 38    val label→ kept=3 = "kept=" + kept3910    println("number=" + number3)11    println(labelkept=3)12  }13}
    outputnumber=3
    kept=3
  1. number ← 12, wrapped ← Identity(12), kept ← 12, wrapped.value ← 12

    3object Main {4  def main(args: Array[String]): Unit = {5    val number→ 12 = 126    val wrapped→ Identity(12) = Identity[Int](number12)7    val kept→ 12 = wrapped.value→ 128    val label→ kept=12 = "kept=" + kept12910    println("number=" + number12)11    println(labelkept=12)12  }13}
    outputnumber=12
    kept=12