类型类子类化

时间:2013-03-06 10:02:19

标签: scala typeclass discriminated-union subtype

我想限制AB类型的联合类型的参数,其中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]
}

现在,我可以接受Foo(5),但不能将Baz("a")放在Bar,编译器尖叫:error: could not find implicit value for parameter ev: FooOrBaish[Baz]。 我在哪里可以指定子类型关系?

1 个答案:

答案 0 :(得分:1)

将FooOrBaish的类型更改为逆变,并且可以正常工作

class FooOrBaish[-A]