Estoy tratando de usar sin forma para acumular fácilmente objetos de una manera segura.Shapeless: Prefijo. Implícito no encontrado
El problema es cuando quiero concat (:::
) dos HList
. Me encuentro con un problema de novato (al menos parece). Se pierde una instancia implícita Prepend
en el contexto.
Sin embargo, mirando en hlist.scala
, puedo ver que implicit def
genérica se definen en los objetos Prepend
y PrependAux
.
Agregar import Prepend
y import PrependAux
manualmente no cambió nada (obviamente ...).
Así que aquí el código reducida al mínimo:
enter code here
import shapeless._
import HList._
import Prepend._
import PrependAux._
object test {
val a:HList = 1 :: 4 :: "A" :: HNil
val b:HList = "R" :: false :: HNil
val c:HList = a ::: b // <<<<<<<<<<< NEEDS A Prepend in the context
}
En la consola ahora:
[error] test.scala:10: could not find implicit value for parameter prepend: shapeless.Prepend[shapeless.HList,shapeless.HList]
[error] val c:HList = a ::: b // this needs an implicit Prepend in the current context
Lo que debería quemar mis ojos?
gracias
EDITAR
Una pequeña actualización para volver a complejizar un poco el problema real, porque a la vulgarización era fuerte antes.
Aquí es el tipo de cosas que yo sería capaz de hacer:
case class A[L<:HList](a:L) {
def doSmth[C <:HList](c:C) = a ::: c
}
por lo que he no el acceso al tipo real, sólo sé que son Hlist s.
las únicas respuestas han sido actualizadas también. y todavía funciona Lo que faltaba en mi solución era, al parecer, la opción scalac ... –