2015-07-22 2 views
2

Я пытаюсь создать пользовательский uPickle Writer для shapeless.HList, превращаясь в простой массив вместо сложного вложенного объекта.uPickle Writer для 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]:_*) 
} 

И компиляции ошибка:

could not find implicit value for parameter toTraversableAux: shapeless.ops.hlist.ToTraversable.Aux[mapper.Out,List,upickle.Js.Value]

Как можно определить функция для преобразования HList в форму List через map?

ответ

1

Я нашел там уже Mapper.Aux для этой цели, в результате чего определение methid выглядит следующим образом:

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]:_*) 
Смежные вопросы