Sin forma: convierta una clase de caso en otra con campos en diferente orden

Estoy pensando en hacer algo similar aCopiar campos de forma segura entre clases de casos de diferentes tipos pero con campos reordenados, es decir

case class A(foo: Int, bar: Int)
case class B(bar: Int, foo: Int)

Y me gustaría tener algo para convertir unA(3, 4) en unaB(4, 3) - sin formaLabelledGeneric viene a la mente, sin embargo

LabelledGeneric[B].from(LabelledGeneric[A].to(A(12, 13)))

resultados en

<console>:15: error: type mismatch;
 found   : shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("foo")],Int],shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("bar")],Int],shapeless.HNil]]
    (which expands to)  shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("foo")],Int],shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("bar")],Int],shapeless.HNil]]
 required: shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("bar")],Int],shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("foo")],Int],shapeless.HNil]]
    (which expands to)  shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("bar")],Int],shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("foo")],Int],shapeless.HNil]]
              LabelledGeneric[B].from(LabelledGeneric[A].to(A(12, 13)))
                                                           ^

¿Cómo reordenar los campos en el registro (?) Para que esto pueda funcionar con un mínimo de repetitivo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta