Higher-kinded type exact bound on a generic case class


I’m having issues with an implementation of the following:

There is a case class A that stores some value of a generic type and associated meta-information, and also there is a collection that stores this case classes. What I want to achieve is to restrict the type of the collection element to be exactly of type A with any generic argument. The example below:

case class A[B](..., val value: B) {
	def equal(that: A[B]) = ???

class Coll[T[P] <: A[P]] private (val collection: Array[T] = Array.empty[T]) {
	def update(a: A): Option[A] = {
		if (...) {
			Some(a.copy(...))  // a.value is untouched
		} else {
		// Issue here as return type of the a.copy() is A[_]

	def add(a: A) = {
		val updated = update(a)

However, when I compile the code there are some issues, like method update returns a value of type A[_] instead of type T, type T in the class variables initialization takes type parameter, method equal expects argument of type A[_], etc. How can I achieve expected behavior and make class Coll parameterized only on instance of a class A?

Many thanks!