uPickle Writer для HList
Я пытаюсь создать пользовательский uPickleWriter
за shapeless.HList
преобразование в простой массив вместо сложного вложенного объекта.
Но я не мог предоставить достаточно конкретных доказательств, которые он мог бы сопоставить с моими poly
У меня есть этот код:
import upickle.Js
import upickle.default._
import shapeless._
import poly._
import shapeless.ops.hlist.{ToTraversable, Mapper}
object writeItem extends Poly1 {
implicit def item[I](implicit w: Writer[I]) = at[I](w.write)(writer.write)
}
implicit def hListWriter[L <: HList, Mappr <: Mapper[writeItem.type, L] ]
(implicit mapper: Mappr,
trav: ToTraversable.Aux[Mappr#Out, List, Js.Value]) = Writer[L] {
l => Js.Arr(l.map(writeItem).toList[Js.Value]:_*)
}
И ошибка компиляции:
не удалось найти неявное значение для параметра
toTraversableAux: shapeless.ops.hlist.ToTraversable.Aux[mapper.Out,List,upickle.Js.Value]
Как можно определить функцию для преобразования HList
униформе List
с помощью map
?
1 ответ
Я нашел уже Mapper.Aux
для этого результирующее определение метида выглядит так:
implicit def hListWriter[L <: HList, Out <: HList]
(implicit mapper: Mapper.Aux[writeItem.type, L, Out],
trav: ToTraversable.Aux[Out, List, Js.Value]) = Writer[L] {
l => Js.Arr(l.map(writeItem).toList[Js.Value]:_*)