如何在Scala中使用族多态性

如何在Scala中使用族多态性,scala,polymorphism,Scala,Polymorphism,我有一段代码需要改进,因为它有一些默认值: 鉴于以下类型的简化: trait Entity case object AEntity extends Entity case object BEntity extends Entity case object CEntity extends Entity case class A case class B case class C 代码如下: def loaderForEntity : Entity => EntityLoader[_]

我有一段代码需要改进,因为它有一些默认值:

鉴于以下类型的简化:

trait Entity
case object AEntity extends Entity
case object BEntity extends Entity
case object CEntity extends Entity

case class A
case class B
case class C
代码如下:

  def loaderForEntity : Entity => EntityLoader[_] = {
    case EntityA => aLoader
    case EntityB => bLoader
    case EntityC => cLoader
  }

  type Location = …
  trait EntityLoader[EntityT] extends ((Location, Service) => EntityT)
  def aLoader = new EntityLoader[A] { def apply(l: Location, store: Service) = store.aForId(l.right.get) }
  def bLoader = new EntityLoader[B] { def apply(l: Location, store: Service) = store.bForId(l.right.get) }
  def cLoader = new EntityLoader[C] { def apply(l: Location, store: Service) = store.cForId(l.right.get) }
如何改进此代码? 如何了解A和EntityA之间关系的类型系统A

目前尚不清楚实体及其后代是用于什么目的的。A,B,C,不能扩展一个公共特性吗?实体是一个枚举,表示类A,B,C的所有可能类型。A,B,C不扩展一个公共特性,但它肯定应该允许EntityLoader中的类型边界。这是可能设计的限制吗?