Я собираюсь сделать что-то похожее на безопасное копирование полей между классами классов разных типов, но с переупорядоченными полями, т.е.
case class A(foo: Int, bar: Int)
case class B(bar: Int, foo: Int)
И мне бы хотелось, чтобы что-то превратило A(3, 4)
в B(4, 3)
- бесформенный 'LabelledGeneric
, однако
LabelledGeneric[B].from(LabelledGeneric[A].to(A(12, 13)))
приводит к
<console>:15: error: type mismatch;
found : shapeless.::[shapeless.record.FieldType[[email protected]@[Symbol,String("foo")],Int],shapeless.::[shapeless.record.FieldType[[email protected]@[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[[email protected]@[Symbol,String("bar")],Int],shapeless.::[shapeless.record.FieldType[[email protected]@[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)))
^
Как изменить порядок полей в записи (?), чтобы это могло работать с минимальным шаблоном?