ich eine einfache rekursive polymorphe Funktion schreiben:Wie kann ich schreiben eine rekursive polymorphe Funktion mit Shapeless
object simpleRec extends Poly1 {
implicit def caseInt = at[Int](identity)
implicit def caseList[A, B](implicit ev: simpleRec.Case.Aux[A, B]) =
at[List[A]](_.headOption.map(simpleRec))
}
Dies scheint weitgehend zu tun, was ich will; aber ich scheine einen unsinniges Ergebnis Typen bekommen:
scala> simpleRec(List.empty[List[Int]])
res3: Option[B] = None
scala> simpleRec(List(List(1)))
res4: Option[B] = Some(Some(1))
Wie kann ich das machen gib mir Werte von Option[Option[Int]]
anstatt Option[B]
? Ich erwarte, dass ich hier einen dummen Fehler mache, aber ich kann nicht herausfinden, was es ist.
Dies ist eine nette Frage. Meine reflexive Antwort war "benutze einfach Case [A]' ", was dir den richtigen abgeleiteten Typ gibt, aber das macht merkwürdige Sachen in z. 'simpleRec (Liste (Liste (1))): Option [Option [Int]]'. –
Können Sie den gesamten Code einfügen? – nathanengineer