object Test {
  type Tag[X] = {type Tag = X}
  type TaggedArray[T] = Array[T] with Tag[Any]

  def method[T: scala.reflect.ClassTag](a: TaggedArray[T], value: T): Unit = {
    a.update(0, value)
    a foreach println
  }

  def main(args: Array[String]): Unit = {
    method(Array(1, 2).asInstanceOf[TaggedArray[Int]], 1)
  }
}
