Ich bin (in der Tat, das ist alles vereinfacht von meinem Arbeitsbeispiel) versuchen, eine markierte HList (ein Datensatz) von kontravariant (konstante Rückkehr Wert, polymorpher Argumenttyp) funktioniert über einen Datensatz, der aus den richtigen Argumenttypen dieser Funktionen besteht. Ich bin mir bewusst, ZipApply, und das scheint für HLists zu arbeiten, aber ich möchte dies speziell unabhängig von der Reihenfolge und insbesondere die Schlüsseltypen verwenden, um auszuwählen, welche Funktionen zu verwenden.Ordnen Sie eine markierte HList (Datensatz) von Funktionen über einen Datensatz ihrer Argumenttypen
Hier ist mein Codebeispiel, das nicht aus Gründen kompiliert ich kann nicht herausfinden:
import shapeless._
import labelled._
import ops.hlist._
import ops.record.Selector
import syntax._
import syntax.singleton._
import syntax.HListOps
object POC {
case class Foo(bar: String)
val gen = LabelledGeneric[Foo]
val funs = ('bar ->> { s: String => s.toUpperCase() }) :: HNil
val poly = new Poly1 {
implicit def apply[K, V]
(implicit selector: Selector.Aux[funs.type, K, (V) => String]) =
at[FieldType[K, V]] { v => selector(funs)(v) }
}
def run(foo: Foo)(implicit mapper: Mapper[poly.type, gen.Repr]) =
mapper(gen to foo)
println(run(Foo("bar")))
// could not find implicit value for parameter mapper: shapeless.ops.hlist.Mapper[POC.<refinement>.type,POC.gen.Repr]
}
Welche Version von Shapeless verwenden Sie? – laughedelic
@laughedelic 2.3.2 – glittershark