Я хочу ограничить параметр типа объединения A
и B
типов, где B
- это общий тип, который будет подтипирован. Я хочу, чтобы поместить объекты в этом методе:Подкласс типа Typeclass
def accept[A](a:A)(implicit ev:FooOrBaish[A]){ /* do something */}
Это, как мне определить implicits:
case class Foo(i:Int)
trait Baish
case object Bar extends Baish
case class Baz(x:String) extends Baish
class FooOrBaish[A]
object FooOrBaish{
implicit object FooWit extends FooOrBaish[Foo]
implicit object BaishWit extends FooOrBaish[Baish]
}
Теперь я могу поставить в принять Foo(5)
, но не может поставить там Baz("a")
ни Bar
, компилятор кричит: error: could not find implicit value for parameter ev: FooOrBaish[Baz]
. Где можно указать отношение подтипа? Тип