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&nbsp;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.