Filtereinsatz bei Shapeless, Scala
Es ist leicht zu filternHList
nach Typ formlos:
val hlist = 1 :: 2 :: "3" :: true :: false :: HNil
hlist.filter[Int]
Aber wie kann ich meinen benutzerdefinierten Typfilter erstellen? Ich möchte so etwas: Zum Beispiel habe ich eine Liste von Funktionen:
def function1(s: String) = s.toInt
def function2(s: String) = s.toDouble
def function3(i: Int) = i.toDouble
val hflist = function1 _ :: function3 _ :: function2 _ :: HNil
hflist customFilter[String] //> function1 _ :: function2 _ :: HNil
Also nach Verwendung dieses Filters Liste der Funktionen vom TypString
zu einem anderen Typ wird gebaut.
Ich hatte die Idee, eine Karte dafür zu verwenden, aber sie war nicht erfolgreich.
AUFLAGE
Weitere Informationen zu meinem Kommentar:
Ich habe versucht, diese Ideen in Karte zu testen:
Also, wenn ich ein paar Listen habe (lassen Sie uns mithlist
& hflist
):
object allFunction extends Poly1 {
implicit def default[T, M] =
at[T => M](t => {
object grabStringFunc extends skip {
implicit def stringFunc[A] = at[T => A](_ :: HNil)
}
println(hflist flatMap grabStringFunc) //> here we should see result, list of functions
})
hlist map allFunction
//> result of this should be smth like (types)
//> shapeless.::[Int => Double,shapeless.HNil]]
//> shapeless.::[Int => Double,shapeless.HNil]]
//> shapeless.::[String => Int,shapeless.::[String => Double,shapeless.HNil]]
//> shapeless.HNil
//> shapeless.HNil
Sehr interessant, warum es kompiliert und fehlerhaft funktioniert? Da ich denke, dass es nicht funktioniert, kann das Objekt keine Typparameter so annehmen ...