Scala抽象类型别名满足方法参数中的类型类
我试图将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
查看代码: 我有一个
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
中,如何声明paramid
的类型
谢谢。例如:
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