У меня есть фрагмент кода, концептуально похожий на следующий:
//library code
trait Support[K, V]
def partialHandler[K, V](key: K, value: V)(implicit ev: Support[K, V]) = ???
//user code
implicit val intIntSupport = new Support[Int, Int] {}
implicit val intStringSupport = new Support[Int, String] {}
...
partialHandler(1, "foo)
partialHandler(1, 1)
Интересно, есть ли способ позволить пользователям этой библиотеки более элегантно определять поддерживаемые типы (K, V)
, например:
val supportedTypes = new Support[Int, Int] {} :: new Support[Int, String] {} :: HNil
(По сути, я ищу неявное преобразование из довольно неизвестного HList в Support[K, V]
. Это не выглядит выполнимым, но, возможно, я что-то упустил.)