Использование фильтра в бесформенном, Scala

Это легко фильтроватьHList в бесформенном по типу:

val hlist = 1 :: 2 :: "3" :: true :: false :: HNil
hlist.filter[Int]

Но как я могу сделать свой собственный фильтр типа? Я хочу что-то вроде этого: например, я получил список некоторых функций:

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

Итак, после использования этого фильтра, список функций из типаString в какой-то другой тип будет построен.

У меня была идея использовать карту для этого, но она не увенчалась успехом.

ИЗДАНИЕ

Больше информации о моем комментарии:

Я попытался проверить эту идею на карте:

Так что, если у меня есть несколько списков (давайте работать сhlist & 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

Очень интересно, почему он компилируется и работает некорректно? Я думаю, что это не работает, потому что объект не может принимать параметры типа таким образом ...

Ответы на вопрос(1)

Ваш ответ на вопрос