Scala抽象类型别名满足方法参数中的类型类

Scala抽象类型别名满足方法参数中的类型类,scala,typeclass,type-alias,Scala,Typeclass,Type Alias,我试图将Scala类型类和抽象类型别名组合在一起,但这给我带来了一些问题。 查看代码: 我有一个ModelService: trait ModelService[T] { type ID def save(t: T): ID def find(id: ID): T } object ModelService { implicit object UserService extends ModelService[User] { type ID = Long def

我试图将Scala类型类和抽象类型别名组合在一起,但这给我带来了一些问题。
查看代码: 我有一个
ModelService

trait ModelService[T] {
  type ID
  def save(t: T): ID
  def find(id: ID): T
}

object ModelService {

  implicit object UserService extends ModelService[User] {
    type ID = Long
    def save(t: User): ID = ???
    def find(id: ID): User = ???
  }

}
我使用类型类来实现:

object ModelHelpers {

  def save[T](model: T)(implicit service: ModelService[T]): service.ID =
    service.save(model)

  def find[T: ModelService](id:) = // here, how can I declare the id's type?
    implicitly[ModelService[T]].find(id)
}
问题是:在
ModelHelpers.save
中,我可以使用
service.ID

但是在
ModelHelpers.find
中,如何声明param
id
的类型

谢谢。

例如:

type User = String

trait ModelService[T] {
  type ID
  def save(t: T): ID
  def find(id: ID): T
}

object ModelService {
  implicit object UserService extends ModelService[User] {
    type ID = Long
    def save(t: User): ID = t.toLong
    def find(id: ID): User = id.toString
  }
}

object ModelHelpers {
  def save[T](model: T)(implicit service: ModelService[T]): service.ID = service save model
  def find[ID0, T](id: ID0)(implicit service: ModelService[T] { type ID = ID0 }): T = service find id
}

ModelHelpers find 5L // "5": User