Я пытаюсь использовать shapeless, чтобы легко накапливать объекты безопасным для типов способом.
Проблема заключается в том, что я хочу объединить ( :::
) два HList
. Я столкнулся с проблемой новичка (по крайней мере, кажется). Он пропускает неявный экземпляр Prepend
в контексте.
Однако, изучив hlist.scala
, я вижу, что общие неявные определения def
определены в объектах Prepend
и PrependAux
. .
Добавление import Prepend
и import PrependAux
вручную ничего не изменило (очевидно...).
Так вот код урезан до минимума:
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
}
В консоли теперь:
[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
Что должно жечь глаза?
спасибо
РЕДАКТИРОВАТЬ
Небольшое обновление, чтобы немного усложнить реальную проблему, потому что опошление было слишком сильным раньше.
Вот что я мог бы сделать:
case class A[L<:HList](a:L) {
def doSmth[C <:HList](c:C) = a ::: c
}
Итак, у меня нет доступа к реальным типам, я знаю только, что они HLists.