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 ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage