Próbuję użyć bezkształtnego, aby gromadzić łatwo obiekty w bezpieczny sposób.Bezkształtne: Przygotuj. Niejawne nie znaleziono
Problem polega na tym, że chcę dołączyć (:::
) dwa HList
. Znam problem początkujący (wydaje się przynajmniej). Tęskni za niejawną instancją Prepend
w kontekście.
Jednak patrząc na hlist.scala
, widzę, że ogólny implicit def
są zdefiniowane w obiektach Prepend
i PrependAux
.
Dodanie import Prepend
i import PrependAux
ręcznie nic nie zmieniło (oczywiście ...).
Więc tutaj kod zredukowana do minimum:
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
}
W konsoli teraz:
[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
Co należy spalić oczy?
dzięki
EDIT
Mała aktualizacja do ponownego complexify nieco prawdziwy problem, bo do wulgaryzacja było przed silnym.
Oto coś takiego, że będę w stanie to zrobić:
case class A[L<:HList](a:L) {
def doSmth[C <:HList](c:C) = a ::: c
}
Więc nie mam dostępu do rzeczywistego typu, tylko wiem, że są one HList s.
jedyne odpowiedzi zostały również zaktualizowane. i nadal działa. Rzeczą, której brakowało w moim rozwiązaniu, była najwyraźniej opcja skalak ... –