Convertir clases de casos anidados en mapas anidados usando Shapeless

Estoy tratando de resolveresta pregunta usando Shapeless, en resumen, se trata de convertir una clase de caso anidada a Map [String, Any], aquí está el ejemplo:

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

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

Quiere convertirp a lo siguiente:

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

Estoy tratando de hacerlo usando ShapelessLabelledGeneric, esto es lo que he hecho hasta ahora:

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)
  }

Estoy tratando de tener un escritor recursivo para verificar cada valor e intentar hacer un Mapa para cada elemento en valor. El código anterior funciona bien, pero cuando quiero repetirvalues con un ejemplo de Poly, usando el siguiente código obtuve estos errores.

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)
                  ^

No sé por qué recibo ese error. También me gustaría saber si hay una manera más fácil de hacer todo usando Shapeless.

Respuestas a la pregunta(2)

Su respuesta a la pregunta