clase de caso copia 'método' con superclase

Quiero hacer algo como esto:

sealed abstract class Base(val myparam:String)

case class Foo(override val myparam:String) extends Base(myparam)
case class Bar(override val myparam:String) extends Base(myparam)

def getIt( a:Base ) = a.copy(myparam="changed")

No puedo, porque en el contexto de getIt, no le he dicho al compilador que cada Base tiene un método de 'copia', pero copiar tampoco es realmente un método, así que no creo que haya un rasgo o un método abstracto Puedo poner en la Base para que esto funcione correctamente. O bien, ¿hay?

Si intento definir Base comoabstract class Base{ def copy(myparam:String):Base }, entoncescase class Foo(myparam:String) extends Base resultados enclass Foo needs to be abstract, since method copy in class Base of type (myparam: String)Base is not defined

¿Hay alguna otra manera de decirle al compilador que todosBase ¿Las clases serán clases de casos en su implementación? ¿Algún rasgo que significa "tiene las propiedades de una clase de caso"?

¿Podría hacer que Base sea una clase de caso, pero luego recibo advertencias del compilador que dicen que la herencia de las clases de caso está en desuso?

Sé que también puedo:

def getIt(f:Base)={ 
  (f.getClass.getConstructors.head).newInstance("yeah").asInstanceOf[Base]
}

Pero ... eso parece muy feo.

¿Pensamientos? ¿Todo mi enfoque es simplemente "incorrecto"?

ACTUALIZAR Cambié la clase base para que contenga el atributo e hice que las clases de caso usaran la palabra clave "sobrescribir". Esto refleja mejor el problema real y lo hace más realista en consideración a la respuesta de Edmondo1984.

Respuestas a la pregunta(7)

Su respuesta a la pregunta