2016-09-04 17 views
0

でサブのクラスの特性におけるデフォルトの型クラスの実装私は次のような関係を持っている:Scalaの

trait Instrument 

trait EquityOption extends Instrument { ... } 
case class CallEquityOption(...) extends EquityOption 
case class PutEquityOption(...) extends EquityOption 

trait Priceable[I <: Instrument] { def price(I : Instrument) } 

私はケースクラスCallEquityOptionPutEquityOptionためPriceableのまったく同じ実装を使用することができます。 Call...Put...の間の差異をmatch caseにすることにより、しかし、私がobject EquityOptionの下にPriceable[EquityOption]として直接実装しようとすると、その型と正確に一致しないため暗黙的なものが見つかりません。

コードを複製する必要なく、どのように動作させることができますか?

答えて

3

EquityOptionのすべてのサブタイプに対してインスタンスを提供できることを証明しなければなりません。

implicit def allEquityOptions[T <: EquityOption]: Pricable[T] = ???