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]