Неявное разрешение параметров для типов с более высоким родом

Рассмотрим следующий код:

object foo {

    trait Bar[Q[_]]

    implicit object OptionBar extends Bar[Option]

    def test[T, C[_]](c: C[T])(implicit bar: Bar[C]) = ()

    def main(args: Array[String]) {
      test(Some(42): Option[Int])  //???
    }
}

Это работает, но мне нужно набрать Some (42) как Option [Int], иначе неявный объект OptionBar не будет разрешен (потому что вместо него ожидается Bar [Some]). Есть ли способ избежать явной типизации, чтобы я получал неявный объект OptionBar в тесте, даже если я передаю тест с Some или None?

[Пояснение]

Я использовал Option здесь как пример, он также должен работать, если у меня естьBar для абстрактного класса и т. д.Решение должно также работать, когда другие, не связанные бары находятся в области действия, скажем,implicit object listBar extends Bar[list]

[Обновить]

Кажется, что создание параметра Бара контравариантным делает свое дело:

object foo {

  trait Bar[-Q[_]] //<---------------

  implicit object OptionBar extends Bar[Option]
  implicit object ListBar extends Bar[List]

  def test[T, C[_]](c: C[T])(implicit bar: Bar[C]) = ()

  def main(args:Array[String]) {
    test(Some(42))
  }
}

Но, конечно, это серьезное ограничение возможностей в баре, поэтому я все еще надеюсь на лучший ответ.

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

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