Reflexión sobre una clase de caso Scala

Estoy tratando de escribir un rasgo (en Scala 2.8) que se puede mezclar en una clase de caso, lo que permite que sus campos se inspeccionen en tiempo de ejecución, para un propósito de depuración particular. Quiero recuperarlos en el orden en que fueron declarados en el archivo fuente, y me gustaría omitir cualquier otro campo dentro de la clase de caso. Por ejemplo:

trait CaseClassReflector extends Product {

  def getFields: List[(String, Any)] = {
    var fieldValueToName: Map[Any, String] = Map()
    for (field <- getClass.getDeclaredFields) {
      field.setAccessible(true)
      fieldValueToName += (field.get(this) -> field.getName) 
    }
    productIterator.toList map { value => fieldValueToName(value) -> value }
  }

}

case class Colour(red: Int, green: Int, blue: Int) extends CaseClassReflector {
  val other: Int = 42
}

scala> val c = Colour(234, 123, 23)
c: Colour = Colour(234,123,23)

scala> val fields = c.getFields    
fields: List[(String, Any)] = List((red,234), (green,123), (blue,23))

La implementación anterior es claramente defectuosa porque adivina la relación entre la posición de un campo en el Producto y su nombre por la igualdad del valor en ese campo, por lo que lo siguiente, por ejemplo, no funcionará:

Colour(0, 0, 0).getFields

¿Hay alguna manera de que esto se pueda implementar?

Respuestas a la pregunta(4)

Su respuesta a la pregunta