Преобразование вложенных классов наблюдений во вложенные Карты с использованием Shapeless

Я пытаюсь решитьэтот вопрос с использованием Shapeless, в итоге речь идет о преобразовании вложенного класса case в Map [String, Any], вот пример:

case class Person(name:String, address:Address)
case class Address(street:String, zip:Int)

val p = Person("Tom", Address("Jefferson st", 10000))

Хочет конвертироватьp к следующему:

Map("name" -> "Tom", "address" -> Map("street" -> "Jefferson st", "zip" -> 10000))

Я пытаюсь сделать это с помощью ShapelessLabelledGenericвот что я пока делаю:

import shapeless._
import record._, syntax.singleton._
import ops.record._
import shapeless.ops.record._

def writer[T,A<:HList,H<:HList](t:T)
(implicit lGeneric:LabelledGeneric.Aux[T,A],
 kys:Keys.Aux[A,H],
 vls:Values[A]) = {
    val tGen = lGeneric.to(t)
    val keys = Keys[lGeneric.Repr].apply
    val values = Values[lGeneric.Repr].apply(tGen)
    println(keys)
    println(values)
  }

Я пытаюсь иметь рекурсивный писатель, чтобы проверить каждое значение и попытаться создать карту для каждого элемента в значении. Приведенный выше код работает нормально, но когда я хочу перебратьvalues с примером Poly, используя следующий код, я получил эти ошибки.

values.map(identity)
//or
tGen.map(identity)

Error:(75, 19) could not find implicit value for parameter mapper: shapeless.ops.hlist.FlatMapper[shapeless.poly.identity.type,vls.Out]
    values.flatMap(identity)
                  ^
Error:(75, 19) not enough arguments for method flatMap: (implicit mapper: shapeless.ops.hlist.FlatMapper[shapeless.poly.identity.type,vls.Out])mapper.Out.
Unspecified value parameter mapper.
    values.flatMap(identity)
                  ^

Я не знаю, почему я получаю эту ошибку. Я также был бы рад узнать, есть ли более простой способ сделать все это, используя Shapeless.

Ответы на вопрос(2)

Ваш ответ на вопрос