Ich lerne formlos, und zur Zeit Ich versuche, eine Funktion zu erstellen, die die folgenden: gegeben eine Art eines HList
es die HList
von None
s zurückkehrt, mit der Option
Typen entsprechend HList
Typ.Deriving hList von Nullen aus einer Art hList von Monoide
Zum Beispiel:
create[String :: Int :: HNil] // returns None[String] :: None[Int] :: HNil
So ist die Logik der folgende:
def create[A <: HList] {
type HT = ??? //somehow getting Head type
type TT = ??? //somehow getting Tail type
// if HT is HNil HNil else Option.empty[HT] :: create[TT]
}
wie die Looks HT
und TT
kann durch IsHCons
def createHList[L <: HList](implicit ihc: IsHCons[L]): HList = {
type HT = ihc.H
type TT = ihc.T
//
}
zur Verfügung gestellt werden, aber dass steigt zwei Probleme
- Wie werden Typen verglichen?
- Compiler kann
IsHCons[TT]
für rekursiven Aufruf nicht finden. (WieISHCons[TT]
vonIsHCons[L]
zu bekommen? Es ist nicht einmal möglich,HNil
!)
Ich denke, dass ich um den (1) zu bekommen, von implicits für HNil
und nicht HNil
Bereitstellung, so dass der Compiler abholt das Recht implizit, abhängig vom Typ.
Bewege ich mich in die richtige Richtung?
Angesichts dessen, kann es sich lohnen, allgemeinere Frage zu stellen. Angesichts der HList
von Monoids, ist es möglich, Null HList
abzuleiten, bestehend aus Nullen von Monoiden geben?
Danke!
Es gibt auch ein ähnliches [formloses Beispiel] (https://github.com/milessabin/shapeless/blob/master/examples/src/main/scala/shapeless/examples/monoids.scala), das "Monoid" ableitet. –