我想限制联合类型A
和B
类型的参数,其中B
一些通用类型将被子类型化。我想把对象放在这个方法中:
def accept[A](a:A)(implicit ev:FooOrBaish[A]){ /* do something */}
这是,我如何指定隐式:
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]
}
现在,我可以放入 accept ,但Foo(5)
不能放在那里,编译器尖叫:。我在哪里可以指定子类型关系?Baz("a")
Bar
error: could not find implicit value for parameter ev: FooOrBaish[Baz]